Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Allow for a non-local Java Compiler to be used (#1988)
Currently if you want to pass in some `javacOptions` that start with `-J` the Java compiler will reject them since the local java compiler won't accept `-J` flags. You can see this in an example on JDK 17 where you need some `-J` flags to get the java semanticdb compiler plugin to work: ```scala object javaModule extends JavaModule { def ivyDeps = Agg(ivy"com.sourcegraph:semanticdb-javac:0.8.2") def javacOptions = Seq( "-J--add-exports", "-Jjdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", "-J--add-exports", "-Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED", "-J--add-exports", "-Jjdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED", "-J--add-exports", "-Jjdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED", "-J--add-exports", "-Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED", s"-Xplugin:semanticdb -sourceroot:${T.workspace} -targetroot:${T.dest}" ) } ``` Which will result in: ``` ❯ mill javaModule.compile [19/19] javaModule.compile [info] compiling 1 Java source to /Users/ckipp/Documents/scala-workspace/minimal/out/javaModule/compile.dest/classes ... [warn] Javac is running in 'local' mode. These flags have been removed: [warn] -J--add-exports, -Jjdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED, -J--add-exports, -Jjdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED, -J--add-exports, -Jjdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED, -J--add-exports, -Jjdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED, -J--add-exports, -Jjdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED [error] An exception has occurred in the compiler (17.0.4). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program, the following diagnostic, and the parameters passed to the Java compiler in your report. Thank you. [error] java.lang.IllegalAccessError: class com.sourcegraph.semanticdb_javac.SemanticdbPlugin (in unnamed module @0x4e59433c) cannot access class com.sun.tools.javac.api.BasicJavacTask (in module jdk.compiler) because module jdk.compiler does not export com.sun.tools.javac.api to unnamed module @0x4e59433c ... ``` This change looks at the `javacOptions` when creating the java compiler and if detected makes sure you get a non-local compiler. If none are detected, then the behavior basically is the same as it was before where a local instance is used. We also cache this to ensure it's not created over and over. However if your `javacOptions` change, then we do give a new instance. Fixes #1983 Pull request: #1988
- Loading branch information