Well you need the leading underscore.
From: Malachi de Ælfweald [mailto:malac...@gmail.com] Sent: Tuesday, July 05, 2016 4:36 PM To: Stephen Felts Cc: Remi Forax; jigsaw-dev@openjdk.java.net Subject: Re: JDK9 Modules adding that (without the leading underscore) I still get: NoClassDefFoundError: javax/annotation/Generated Malachi de Ælfweald http://www.google.com/profiles/malachid On Tue, Jul 5, 2016 at 12:58 PM, Stephen Felts <HYPERLINK "mailto:stephen.fe...@oracle.com" \nstephen.fe...@oracle.com> wrote: Try running with export _JAVA_OPTIONS=”-Djdk.launcher.addmods=ALL-SYSTEM” From: Malachi de Ælfweald [mailto:HYPERLINK "mailto:malac...@gmail.com" \nmalac...@gmail.com] Sent: Tuesday, July 05, 2016 3:29 PM To: Stephen Felts Cc: Remi Forax; HYPERLINK "mailto:jigsaw-dev@openjdk.java.net" \njigsaw-...@openjdk.java.net Subject: Re: JDK9 Modules That's a very useful command. Thanks for that. I fixed it to add the 's'. I also tried it without that module. I had to remove -verbose from the jdk9args due to https://discuss.gradle.org/t/cannot-run-build-with-jvm-argument-verbose-class/17734 'clean' works with -verbose removed from jdk9args 'build' still says `NoClassDefFoundError: javax/annotation/Generated` That is despite the logs showing: 12:24:13.294 [ERROR] [system.err] [loading /modules/java.annotations.common/module-info.class] 12:24:13.298 [ERROR] [system.err] [loading /modules/HYPERLINK "http://java.se.ee/module-info.class" \njava.se.ee/module-info.class] Removing -verbose from the build.gradle didn't make a difference. Malachi de Ælfweald http://www.google.com/profiles/malachid On Tue, Jul 5, 2016 at 11:41 AM, Stephen Felts <HYPERLINK "mailto:stephen.fe...@oracle.com" \nstephen.fe...@oracle.com> wrote: Remove -addmods java.annotation.common Or change it to java.annotations.common You should get use to using jimage list --dir=. $JAVA_HOME/lib/modules > t textedit t From: Malachi de Ælfweald [mailto:HYPERLINK "mailto:malac...@gmail.com" \nmalac...@gmail.com] Sent: Tuesday, July 05, 2016 2:34 PM To: Stephen Felts Cc: Remi Forax; HYPERLINK "mailto:jigsaw-dev@openjdk.java.net" \njigsaw-...@openjdk.java.net Subject: Re: JDK9 Modules Hi Stephen, Here's the result of that change: I tried this: export GRADLE_OPTS="@/home/malachi/work/private/sandbox2/jdk9args -Xmx2048m -Dorg.gradle.jvmargs=\"@/home/malachi/work/private/sandbox2/jdk9args -Xmx2048m\"" with: -addmods HYPERLINK "http://java.se.ee" \njava.se.ee -addmods java.annotation.common -verbose I should mention that I am using Gradle 3.0-milestone-2 and my ~/gradle.properties is already set to: org.gradle.daemon=false org.gradle.jvmargs=-Xmx5192m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 This is interesting because now, 'clean' fails to find java.annotations.common, which it didn't before. Also because Dagger is no longer in that stack trace. [0.174s][info][class,load] java.lang.module.ResolutionException source: jrt:/java.base Error occurred during initialization of VM java.lang.module.ResolutionException: Module java.annotation.common not found at java.lang.module.Resolver.fail(java.base@9-ea/Resolver.java:785) at java.lang.module.Resolver.resolveRequires(java.base@9-ea/Resolver.java:95) at java.lang.module.Configuration.resolveRequiresAndUses(java.base@9-ea/Configuration.java:370) at java.lang.module.ModuleDescriptor$1.resolveRequiresAndUses(java.base@9-ea/ModuleDescriptor.java:1979) at jdk.internal.module.ModuleBootstrap.boot(java.base@9-ea/ModuleBootstrap.java:263) at java.lang.System.initPhase2(java.base@9-ea/System.java:1928) Malachi de Ælfweald http://www.google.com/profiles/malachid On Tue, Jul 5, 2016 at 11:11 AM, Stephen Felts <HYPERLINK "mailto:stephen.fe...@oracle.com" \nstephen.fe...@oracle.com> wrote: You need to also pass the correct information to the daemon using something like the following (you can replace the argument files with the in-line information). GRADLE_OPTS=@/mydir/jdk9args -Xmx2048m -Dorg.gradle.jvmargs="@/mydir/jdk9args -Xmx2048m " From: Malachi de Ælfweald [mailto:HYPERLINK "mailto:malac...@gmail.com" \nmalac...@gmail.com] Sent: Tuesday, July 05, 2016 1:52 PM To: Stephen Felts Cc: Remi Forax; HYPERLINK "mailto:jigsaw-dev@openjdk.java.net" \njigsaw-...@openjdk.java.net Subject: Re: JDK9 Modules Adding the fork and forkOptions got me further on the Dagger test. I also added -verbose. I can see: [loading /modules/java.annotations.common/module-info.class] [loading /modules/HYPERLINK "http://java.se.ee/module-info.class" \njava.se.ee/module-info.class] so it is finding the modules... The stack is a bit more helpful now: An annotation processor threw an uncaught exception. Consult the following stack trace for details. java.lang.NoClassDefFoundError: javax/annotation/Generated at dagger.internal.codegen.SourceFileGenerator.<clinit>(SourceFileGenerator.java:49) at dagger.internal.codegen.ComponentProcessor.initSteps(ComponentProcessor.java:103) at dagger.shaded.auto.common.BasicAnnotationProcessor.init(BasicAnnotationProcessor.java:121) at com.sun.tools.javac.processing.JavacProcessingEnvironment$ProcessorState.<init>(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:674" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:674) at com.sun.tools.javac.processing.JavacProcessingEnvironment$DiscoveredProcessors$ProcessorStateIterator.next(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:771" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:771) at com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:862" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:862) at com.sun.tools.javac.processing.JavacProcessingEnvironment.access$2100(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:107" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:107) at com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:1184" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:1184) at com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(HYPERLINK "mailto:jdk.compiler@9-ea/JavacProcessingEnvironment.java:1292" \njdk.compiler@9-ea/JavacProcessingEnvironment.java:1292) at com.sun.tools.javac.main.JavaCompiler.processAnnotations(HYPERLINK "mailto:jdk.compiler@9-ea/JavaCompiler.java:1229" \njdk.compiler@9-ea/JavaCompiler.java:1229) at com.sun.tools.javac.main.JavaCompiler.compile(HYPERLINK "mailto:jdk.compiler@9-ea/JavaCompiler.java:903" \njdk.compiler@9-ea/JavaCompiler.java:903) at com.sun.tools.javac.main.Main.compile(HYPERLINK "mailto:jdk.compiler@9-ea/Main.java:280" \njdk.compiler@9-ea/Main.java:280) at com.sun.tools.javac.main.Main.compile(HYPERLINK "mailto:jdk.compiler@9-ea/Main.java:144" \njdk.compiler@9-ea/Main.java:144) at com.sun.tools.javac.Main.compile(HYPERLINK "mailto:jdk.compiler@9-ea/Main.java:55" \njdk.compiler@9-ea/Main.java:55) at com.sun.tools.javac.Main.main(HYPERLINK "mailto:jdk.compiler@9-ea/Main.java:41" \njdk.compiler@9-ea/Main.java:41) Caused by: java.lang.ClassNotFoundException: javax.annotation.Generated at java.net.URLClassLoader.findClass(HYPERLINK "mailto:java.base@9-ea/URLClassLoader.java:384" \njava.base@9-ea/URLClassLoader.java:384) at java.lang.ClassLoader.loadClass(HYPERLINK "mailto:java.base@9-ea/ClassLoader.java:486" \njava.base@9-ea/ClassLoader.java:486) at java.lang.ClassLoader.loadClass(HYPERLINK "mailto:java.base@9-ea/ClassLoader.java:419" \njava.base@9-ea/ClassLoader.java:419) ... 15 more Looks like this line is the one instigating the NoClassDefFoundError: https://github.com/google/dagger/blob/master/compiler/src/main/java/dagger/internal/codegen/SourceFileGenerator.java#L49 private static final AnnotationSpec GENERATED = AnnotationSpec.builder(Generated.class) .addMember("value", "$S", ComponentProcessor.class.getName()) .addMember("comments", "$S", GENERATED_COMMENTS) .build(); Malachi de Ælfweald http://www.google.com/profiles/malachid On Tue, Jul 5, 2016 at 8:19 AM, Stephen Felts <HYPERLINK "mailto:stephen.fe...@oracle.com" \nstephen.fe...@oracle.com> wrote: I sometimes find tracking down JDK9 related fixes difficult. Obviously some are easy like PermSize on the command line. Anything that depends on rt.jar or finding tools.jar is broken. Some tools validate the jdk directory by looking for rt.jar. Some like jython use it to resolve class names. The class version number change broke anything that uses ASM - spring, jarjar, gradle (embeds it), glassfish hk2, jersey. I temporarily coded already all of these by pre-pending fixed classes for all of these (properly re-packaged for each) to the classpath. There are some changes needed in ant (although using a fork="true" works around some of them). Weld is broken although you can update the pom. Jmockit has gone through many iterations of various things being broken. 1.25 fixed some JDK9 problems but removed some API's that we depend on heavily (1700+ references). We are making use of an argument file on the command line and also an argument file passed in the java via _JAVA_OPTIONS=-XX:VMOptionsFile. Gradle is tricky because of the daemon. Also, you can't pass an argument file to gradle because it puts the arguments in an argument file and nesting isn't supported. So then we need to pass the arguments directly in addition to the arguments files. tasks.withType(JavaCompile) { options.fork = true options.forkOptions.executable = 'javac' if (JDK9BASE != null) { // For Jake, set paths and exports // These will be removed when the CORBA replacement is completed options.compilerArgs << '-addmods' options.compilerArgs << 'java.corba,jdk.rmic' ...... } } I don't seem to be able to change the addmods option for a single module. For example, I have the above two Java modules set globally but for one Gradle module I need java.xml.bind and I can't just re-set it at the individual module level to -addmods java.xml.bind. -----Original Message----- From: Malachi de Ælfweald [mailto:HYPERLINK "mailto:malac...@gmail.com" \nmalac...@gmail.com] Sent: Tuesday, July 05, 2016 4:15 AM To: Remi Forax Cc: HYPERLINK "mailto:jigsaw-dev@openjdk.java.net" \njigsaw-...@openjdk.java.net Subject: Re: JDK9 Modules Hi Remi, with: compileJava { options.compilerArgs += [ "-addmods", "HYPERLINK "http://java.se.ee" \njava.se.ee" ] } It still says it can not find javax/annotation/Generated I'm on build 9-ea+123 Malachi de Ælfweald http://www.google.com/profiles/malachid On Tue, Jul 5, 2016 at 1:02 AM, Remi Forax <HYPERLINK "mailto:fo...@univ-mlv.fr" \nfo...@univ-mlv.fr> wrote: > ----- Mail original ----- > > De: "Malachi de Ælfweald" <HYPERLINK "mailto:malac...@gmail.com" > > \nmalac...@gmail.com> > > À: HYPERLINK "mailto:jigsaw-dev@openjdk.java.net" > > \njigsaw-...@openjdk.java.net > > Envoyé: Mardi 5 Juillet 2016 09:00:22 > > Objet: JDK9 Modules > > > > While I understand the motivation behind making the system more > > modular, > I > > am having a bit of a problem understanding how to use it with > > existing > 3rd > > party APIs. I saw the email thread with Alan and Stephen discussing > > how there was a need to test some of the tools. > > > > Over the last couple weeks, I have been testing various APIs, mostly > within > > Gradle. While most of them work (as would be expected by any > > dev/user) a couple did not work with JDK9. After spending a few > > hours trying the various suggestions (jdeps, -addmods, etc) I have > > not yet managed to get any API to work that showed a module problem. > > So far, my only resolution has been to downgrade to JDK8, but that > > is obviously not the ideal > solution. > > > > I'd really like to understand how to troubleshoot it and fix it so > > that I can help others with the transition. So far, none of the > > suggestions I have found work. > > > > Neo4j fails due to internal Sun classes being used: > > cannot access class sun.nio.ch.FileChannelImpl (in module java.base) > > because module java.base does not export HYPERLINK "http://sun.nio.ch" > > \nsun.nio.ch to unnamed > > module @0x6166e06f > > > > Dagger fails due to the @Generated: > > NoClassDefFoundError: javax/annotation/Generated > > > > For the Neo4j case, I assumed I may just be out of luck with the > > sun.* classes, however as an end-user I thought there would be some > > way to specify that I want all modules installed. I could not > > figure out how to do that. I tried to use jdeps to figure out what > > to do, but it is not > very > > friendly with dynamically included transitive dependencies. > > > > For the Dagger case, I know it is accepting the '-addmods' argument, > > because it gives an error if I use '-J-addmods'. I also know that > > it is accepting "java.annotations.common" because if I change it to > > javax, it gives an error. But it still can't find the class. I've > > also tried ALL-SYSTEM and ALL-UNNAMED. > > > > > > I know that eventually these modules will have to be updated to > > include their module export definitions... but what can I do to fix > > it. Better yet, as an end-user, what can I do to just auto-resolve > > everything? > > > > > > Malachi de Ælfweald > > http://www.google.com/profiles/malachid > > > > Hi Malachi, > javax.annotation package is in a module which is not a boot module > anymore, (because this package is defined both by the java se spec and > the java ee spec and jigsaw doesn't allow split package) you should > use "-addmods HYPERLINK "http://java.se.ee" \njava.se.ee", see JEP 261 [1] > (you can look for > HYPERLINK "http://java.se.ee" \njava.se.ee in the text) > > cheers, > Rémi > > [1] http://openjdk.java.net/jeps/261 > > >