|
Blocks :
|
|
|
Relates :
|
|
|
Relates :
|
|
|
Relates :
|
Summary
-------
Create a tool that can assemble and optimize a set of modules and their
dependencies into a custom run-time image as defined in
[JEP 220](http://openjdk.java.net/jeps/220).
Non Goals
---------
This JEP does not commit the resulting tool to generate anything other
than a modular run-time image.
It is not a goal of this JEP to define a standard or supported API for
plugins. Instead, the plugin API will be **strictly experimental**. A
future JEP may re-visit this topic once experience has been obtained
using the plugin API defined by this JEP.
Motivation
----------
[JEP 261](http://openjdk.java.net/jeps/261) defines _link time_ as an
optional phase between the phases of compile time (the `javac` command)
and run-time (the `java` run-time launcher). Link time requires a linking
tool that will assemble and optimize a set of modules and their
transitive dependencies to create a run-time image or executable.
Link time is an opportunity to do _whole-world_ optimizations that are
otherwise difficult at compile time or costly at run-time. An example
would be to optimize a computation when all its inputs become constant
(i.e., not unknown). A follow-up optimization would be to remove code
that is no longer reachable.
Description
-----------
A basic invocation of the linker tool, `jlink`, is:
$ jlink --module-path <modulepath> --add-modules <modules> --limit-modules <modules> --output <path>
where:
- `--module-path` is the path where observable modules will be
discovered by the linker; these can be modular JAR files, JMOD files,
or exploded modules
- `--add-modules` names the modules to add to the run-time image; these
modules can, via transitive dependencies, cause additional modules to
be added
- `--limit-modules` limits the universe of observable modules
- `--output` is the directory that will contain the resulting run-time
image
The `--module-path`, `--add-modules`, and `--limit-modules` options are
described in further detail in [JEP 261](http://openjdk.java.net/jeps/261).
Other options that `jlink` will support include:
- `--help` to print a usage/help message
- `--version` to print version information
Alternatives
------------
The alternative to a linking tool is to use platform-specific JDK and JRE
image-build scripts. This approach would make it difficult to create
custom run-time images.
Testing
-------
Beyond the expected set of unit tests to exercise the tool I, the JDK build
will regularly exercise `jlink` by creating the JDK and JRE run-time images.
Risks and Assumptions
---------------------
The set of requirements for the tool is not complete at this time. The
tool's extensibility is expected to evolve.
Dependences
-----------
- This JEP depends on the module system that will be specified by
[JSR 376 (Java Platform Module System)](http://openjdk.java.net/projects/jigsaw/spec)
and implemented by [JEP 261: Module System](http://openjdk.java.net/jeps/261).
- The initial implementation of [JEP 220](http://openjdk.java.net/jeps/220)
in JDK 9 uses a custom build-time tool to construct JRE and JDK
images. That tool will be replaced by `jlink`.
|