On Tue, 22 Nov 2022 20:50:04 GMT, Magnus Ihse Bursie <i...@openjdk.org> wrote:
> In JDK-8297041, the javacserver was moved out of the JDK itself, and lifted > out as a separate buildtool. Due to this, internal classes in jdk.compiler > were no longer available. Therefore, the closest way to calling javac as > before were to use `com.sun.tools.javac.Main.compile()`. This method is > however deprecated for removal, and relying on that was only needed as a > temporary measure during the transition. > > After the major refactoring of the javacserver tool in JDK-8297444, it will > be easy to replace the Main.compile API with the official ToolProvider API > instead. I have now verified that the interim compiler is indeed used (made it say bad words and fail at startup, so there is no doubt about it :)). As to the reason why this is so, here is the magic incantation from `$(INTERIM_LANGTOOLS_ARGS)`: --limit-modules java.base,jdk.zipfs,$(INTERIM_LANGTOOLS_MODULES_COMMA) \ --add-modules $(INTERIM_LANGTOOLS_MODULES_COMMA) \ --module-path $(BUILDTOOLS_OUTPUTDIR)/interim_langtools_modules \ --patch-module java.base=$(BUILDTOOLS_OUTPUTDIR)/gensrc/java.base.interim \ --add-exports java.base/sun.reflect.annotation=jdk.compiler.interim \ --add-exports java.base/jdk.internal.jmod=jdk.compiler.interim \ --add-exports java.base/jdk.internal.misc=jdk.compiler.interim \ --add-exports java.base/sun.invoke.util=jdk.compiler.interim \ --add-exports java.base/jdk.internal.javac=java.compiler.interim \ --add-exports java.base/jdk.internal.javac=jdk.compiler.interim \ I hope you are not asking me to explain in detail how or why this works. :-) ------------- PR: https://git.openjdk.org/jdk/pull/11299