On Tue, 22 Nov 2022 20:50:04 GMT, Magnus Ihse Bursie <[email protected]> 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