JEP 282: jlink: The Java LinkerJEP 282: jlink: The Java LinkerAuthorJean-Francois DeniseOwnerJim LaskeyTypeFeatureScopeJDKStatusClosed / DeliveredRelease9Componenttools / jlinkDiscussionjigsaw dash dev at openjdk dot java dot netEffortLDurationLDependsJEP 261: Module SystemRelates toJEP 220: Modular Run-Time ImagesJEP 275: Modular Java Application PackagingReviewed byAlan Bateman, Alex Buckley, Iris Clark, Jim Laskey, Mandy Chung, Mark ReinholdEndorsed byBrian GoetzCreated2015/07/16 12:55Updated2017/05/19 02:01Issue8131679Summary
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.
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 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.
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)
and implemented by JEP 261: Module System.


The initial implementation of JEP 220
in JDK 9 uses a custom build-time tool to construct JRE and JDK
images. That tool will be replaced by jlink.


InstallingContributingSponsoringDevelopers' GuideVulnerabilitiesJDK GA/EA BuildsMailing listsWiki
                      · IRCBylaws · CensusLegalWorkshopJEP ProcessSource codeMercurialGitHubToolsGitjtreg harnessGroups(overview)AdoptionBuildClient LibrariesCompatibility & Specification ReviewCompilerConformanceCore LibrariesGoverning BoardHotSpotIDE Tooling & SupportInternationalizationJMXMembersNetworkingPortersQualitySecurityServiceabilityVulnerabilityWebProjects(overview,
      archive)AmberBabylonCRaCCaciocavalloClosuresCode ToolsCoinCommon VM InterfaceCompiler GrammarDetroitDevelopers' GuideDevice I/ODukeGalahadGraalIcedTeaJDK 7JDK 8JDK 8 UpdatesJDK 9JDK
      (…,
       21,
       22,
       23)JDK UpdatesJavaDoc.NextJigsawKonaKullaLambdaLanaiLeydenLilliputLocale EnhancementLoomMemory Model UpdateMetropolisMission ControlMulti-Language VMNashornNew I/OOpenJFXPanamaPenrosePort: AArch32Port: AArch64Port: BSDPort: HaikuPort: Mac OS XPort: MIPSPort: MobilePort: PowerPC/AIXPort: RISC-VPort: s390xPortolaSCTPShenandoahSkaraSumatraTiered AttributionTsanType AnnotationsValhallaVeronaVisualVMWakefieldZeroZGC

        © 2024 Oracle Corporation and/or its affiliates
        Terms of Use
        ·
        
            License: GPLv2
        · Privacy
        · Trademarks
