Skip to content

Compiling generated libraries with Java 9+ fails due to javax.annotation.Generated #888

@chanseokoh

Description

@chanseokoh

For example, compiling a "self-service" generated library with ./gradlew check fails:

> Task :proto-google-cloud-retail-v2alpha-java:compileJava
/tmp/google-cloud-retail-v2alpha-java/proto-google-cloud-retail-v2alpha-java/src/main/java/com/google/cloud/retail/v2alpha/LocationName.java:27: error: cannot find symbol
import javax.annotation.Generated;

The javax.annotation package space is really a mess from the perspective of Java 9+ JPMS, and it has caused a lot of trouble to many people with Java 9+.

The right solution for Java 9+ is to drop javax.annotation.Generated and migrate to javax.annotation.processing.Generated. However, doing so will cause Java 8 to fail with the same "cannot find symbol" error. An option would be to completely drop using the annotation. However, the gRPC proto compiler generated files with the annotation, so they are out of our control:

@javax.annotation.processing.Generated(
    value = "by gRPC proto compiler",
    comments = "Source: google/cloud/retail/v2alpha/product_service.proto")

A workaround for the users hitting this issue is to declare the following dependency, but this isn't really the right solution.

implementation 'javax.annotation:javax.annotation-api:1.3.2'

Refs:
google/dagger#880
grpc/grpc-java#3633
vavr-io/vavr#2154

Metadata

Metadata

Assignees

No one assigned

    Labels

    priority: p3Desirable enhancement or fix. May not be included in next release.semver: majorHint for users that this is an API breaking change.type: feature request‘Nice-to-have’ improvement, new feature or different behavior or design.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions