On 16/10/2017 16:41, Martin Buchholz wrote:
The difficulties encountered trying to run langtools10 in a jdk9 suggests
that the jdk9 module model is too restrictive. I've long lobbied for
treating langtools as just another collection of ordinary programs that
happen to be written in java and should not need special support from the
host jdk.
Many people will want to run modified langtools. Shouldn't replaceability
of any module be one of the goals of the module system?
The module system already supports ways to replace/override a module
(via the upgrade module path and the --upgrade-module-path option) or
patch/augment a module to override or add classes/resources
(--patch-module).
At the same time, it supports the ability to tie a group of closely
connected modules with integrity hashes to prevent accidental mixing of
modules from different builds or releases.
The issue that Erik has been wrestling with is that a module can't be
both upgradeable and non-upgradable at the same time. If they
upgradeable then you risk someone creating a run-time image with
jdk.compiler and jdk.javadoc modules from different JDK releases - it's
not supportable of course. If you continue with them as non-upgradeable
modules then you need to do something special in the JDK build to
combine a boot JDK with newer versions of the modules and this is what
Erik is doing. There are a couple of ways to do that, like putting the
classes for these modules on the class path and limiting observability
with --limit-modules. The alternative is to put the code into modules
with new names, Erik's patch favors that approach.
-Alan.