-
Notifications
You must be signed in to change notification settings - Fork 1.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
NoClassDefFoundError: javax/annotation/Generated on Java 9 #560
Comments
I went ahead and added 'javax.annotation:javax.annotation-api:jar:1.3.1' to Gerrit with this patch: [1]. Now I'm getting a different error:
|
The NPE seems to be related to the patched Bazel version. I extracted this reproducer from gerrit Code Review project and verified that auto-value just worked with Maven, but failing with NPE with Bazel. |
The part of this that is an auto bug is that auto/value/src/main/java/com/google/auto/value/processor/AutoAnnotationProcessor.java Line 450 in c9fd48f
That avoids the need for an explicit dep on
The other NPE:
... appears to be because the patch to gerrit and the repro at davido/ostrovsky add
|
Maven can make the distinction (https://maven.apache.org/plugins/maven-compiler-plugin/compile-mojo.html#annotationProcessorPaths) but the repro case here does not use the processor classpath (i.e. annotation processors are looked up in the compilation classpath). |
@cushon Thanks. It was too early today morning. I can build GWT UI based gerrit on Java 9 now. JS stack is still failing with Dagger related stuff, used by rules_closure, reported here [1]. Even more interesting, if I try to install gerrit.war, that was built with Java 9, I'm running into NPE:
Well, looking at the auto-value generated code where the above exception is thrown:
I would need to look deeper, what is going on there. |
@cushon Thanks for the pointer.
I was able to replace this hard coded part with:
But, in the same compilation unit we have also this usage of:
Just guessing:
|
Seems to be fixed with: f04406c. |
We need to upgrade rules_closure tools to be able to build with Java 9. That's because rules_closure depends on dagger 2 and auto-common and auto-value, that need to be updated to not depend on legacy annotations (that are not available on Java 9). Moreover, latest rules_closure switched to building protobuf library from the sources, creating the next problem: Protobuf doesn't support Java 9 yet. That was fixed only on master, so that we need to update rules_closure to consume the protobuf dependency from HEAD. See these issues for more background: [1],[2],[3],[4]. [1] google/auto#560 [2] bazelbuild/rules_closure#234 [3] google/dagger#880 [4] protocolbuffers/protobuf#4256 Bug: Issue 7958 Change-Id: I56f3b6101e06bd678b4e42d3a9d52157963513aa
//CC @cushon
This is the very first time, I'm trying to build Gerrit Code Review with Bazel, with Java 9. We have this Bazel patch: hhclam/bazel@64212c8.
One issue is EP doesn't really work with mentioned Bazel patch, the vanilla javac is used and not the bundled one with Bazel:
EP can be disabled for now, using: --javacopt="-XepDisableAllChecks" option.
Gerrit issue, is outdated auto-value version used (1.4.1). That's because the
auto-value
upgrade had to be reverted due to Eclipse-Oxygen bug, that was fixed meantime, but wasn't released yet.Auto-value is upgraded with this diff (applied on gerrit master):
With these three fixes:
trying to build
java/com/google/gerrit/sshd:sshd
on Java 9 is failing with:Environment: Linux.
The text was updated successfully, but these errors were encountered: