Platform module for javac to locate classes from system module library
Jonathan Gibbons
jonathan.gibbons at oracle.com
Tue Apr 6 09:57:20 PDT 2010
Mandy,
I like the suggestion of using a module name such as jre.legacy for the
situations like 3.a.ii when we are compiling legacy code with no
module-info at all. (I'm not fussed about the exact name that you
choose.) and when some sort of module resolver is in use.
I have a mild preference for sun.boot.class.path remaining available for
"no modules" mode (2d), but the more we exercise and use the preferred
alternatives, the less important it becomes to have a fall back
position, which is what -XDnomodules provides.
-- Jon
Mandy Chung wrote:
> Jon, Mark,
>
> There are two module compilation modes described in [1]:
> 3.a) Single module mode
> 3.a.i - compiling modular code (i.e. module-info.java exists)
> 3.a.ii - compiling non-modular code (i.e. no module-info.java
> exists)
> 3.b) Multi-module mode
>
> In this context, I'm interested in the jigsaw mode (2.a) that asks the
> jigsaw resolver for module resolution and the system module library
> contains some platform modules.
>
> For compiling modular code (single (3.a.i) or multiple (3.b) module
> mode), there is one or more module-info.java files on the command
> line. If the module-info.java doesn't specify a dependency on the
> platform modules, javac will use the default platform module to locate
> classes and resolve dependencies. This sounds good so far (what the
> default platform module should be is a separate question).
>
> When compiling non-modular code in single module mode (3.a.ii)), there
> is no module-info.java file explicitly specified on the command line
> and javac will need to read module-info from the system module
> library. I'd like this module resolution mode to provide equivalent
> functionality as "javac's legacy mode" such that it can locate all
> classes in the system module library regardless of what modules are
> installed (i.e. the default platform module might not exist). For
> example, jdk-base-image only contains jdk.base module + jdk.logging +
> javac and its dependences. I expect it can compile a simple program
> that uses java.util.logging API:
> $ cat Helloworld.java
> public class Helloworld {
> java.util.logging.Logger.getLogger("org.hello");
> }
>
> $ jdk-base-image/bin/javac Helloworld.java
>
> In this case, the default platform module doesn't exist. Additional
> modules can be installed in the system module library later. Should
> this module resolution mode (3.a.ii) support a system module library
> of any installed module? Or should this module resolution mode
> (3.a.ii) only be supported in the full jdk (i.e. equivalent to the
> legacy image)?
>
> To support (3.a.ii) in a system module library of any installed
> module, one proposal is to have javac to use a module that can
> aggregate all modules installed in the system module library at any
> point in time for resolution instead of the default platform module.
> For example, we can define a "jre.legacy" module that has optional
> dependences on all jre
> modules and the jre.legacy is always installed in the base image.
> This is described in the legacy boot loader approach [2]. For (3.a.i)
> mode, javac will use the default platform module. For (3.a.ii) mode,
> javac will use the "jre.legacy" module. Jon also explores the option
> of setting 'sun.boot.class.path" property. I don't think we should
> rely on the existence of "sun.boot.class.path" property in the modular
> world.
>
> Thanks
> Mandy
>
> [1]
> http://mail.openjdk.java.net/pipermail/jigsaw-dev/2010-April/000763.html
> [2]
> http://mail.openjdk.java.net/pipermail/jigsaw-dev/2010-February/000563.html
>
More information about the jigsaw-dev
mailing list