惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
The GitHub Blog
The GitHub Blog
美团技术团队
Know Your Adversary
Know Your Adversary
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
Stack Overflow Blog
Stack Overflow Blog
Attack and Defense Labs
Attack and Defense Labs
G
Google Developers Blog
I
InfoQ
博客园 - 司徒正美
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
博客园 - 聂微东
A
About on SuperTechFans
云风的 BLOG
云风的 BLOG
S
Security Affairs
M
MIT News - Artificial intelligence
Simon Willison's Weblog
Simon Willison's Weblog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
T
Tailwind CSS Blog
量子位
Vercel News
Vercel News
月光博客
月光博客
V
Vulnerabilities – Threatpost
N
News and Events Feed by Topic
Hugging Face - Blog
Hugging Face - Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
L
LINUX DO - 最新话题
F
Full Disclosure
The Hacker News
The Hacker News
Hacker News: Ask HN
Hacker News: Ask HN
T
Tor Project blog
A
Arctic Wolf
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Forbes - Security
Forbes - Security
IT之家
IT之家
Apple Machine Learning Research
Apple Machine Learning Research
B
Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Y
Y Combinator Blog
GbyAI
GbyAI
B
Blog RSS Feed
V
Visual Studio Blog
T
The Blog of Author Tim Ferriss
F
Fortinet All Blogs

Adoptium Blog

Eclipse Temurin 8u492, 11.0.31, 17.0.19, 21.0.11, 25.0.3 and 26.0.1 Available Exploring Packaging Changes to Temurin JDK on AIX, Linux ppc64le and Linux s390x Eclipse Temurin 26 Available Celebrating Technical Achievements: 2025 Q4 Engineering milestones and community contributions Eclipse Temurin 8u482, 11.0.30, 17.0.18, 21.0.10 and 25.0.2 Available Adoptium's Plan to End Support for Solaris and Windows 32-bit Platforms Eclipse Temurin 8u472, 11.0.29, 17.0.17, 21.0.9 and 25.0.1 Available Eclipse Temurin 25 Available Eclipse Temurin 8u462, 11.0.28, 17.0.16, 21.0.8 and 24.0.2 Available AQAvit in 2025 Eclipse Temurin 8u452, 11.0.27, 17.0.15, 21.0.7 and 24.0.1 Available Eclipse Temurin 24 Available Eclipse Temurin 8u442, 11.0.26, 17.0.14, 21.0.6 and 23.0.2 Available Eclipse Temurin 8u432, 11.0.25, 17.0.13, 21.0.5 and 23.0.1 Available Eclipse Temurin 23 Available Eclipse Temurin Reproducible Verification Builds for Secure Supply Chain Validation Eclipse Temurin 8u422, 11.0.24, 17.0.12, 21.0.4 and 22.0.2 Available Important Update: Removal of CentOS 7 Eclipse Temurin Images External audit of Temurin build and distribution processes The Scope of AQAvit Eclipse Temurin 8u412, 11.0.23, 17.0.11, 21.0.3 and 22.0.1 Available Eclipse Temurin 21 and 22 Available on RISC-V Eclipse Temurin 22 Available AQAvit Graduation Ceremony Tagged early access builds for all releases Eclipse Temurin 8u402, 11.0.22, 17.0.10 and 21.0.2 Available SLSA build level 3 compliance on Linux and macOS for Eclipse Temurin Eclipse Temurin 8u392, 11.0.21, 17.0.9 and 21.0.1 Available Reproducible Comparison Builds Eclipse Temurin 21 release delay Eclipse Temurin 11.0.20.1, 17.0.8.1 now available Early access builds for JDK21+ Eclipse Temurin 8u382, 11.0.20, 17.0.8 and 20.0.2 Available Peeling the Big Onion - Stripping out layers of indirection from test frameworks AdoptOpenJDK.jfrog.io has been deprecated! Adoptium Automated Deployment Of Nagios Eclipse Temurin 8u372, 11.0.19, 17.0.7 and 20.0.1 Available Adoptium Infrastructure Management With Nagios Eclipse Temurin 8u362, 11.0.18, 17.0.6 and 19.0.2 Available EMT4J – An Easier Upgrade for Java Applications Secure Software Development Framework (SSDF) at Adoptium SLSA level 2 compliance for Eclipse Temurin A month after EclipseCon - Adoptium Community day summary, and more. Adoptium Welcomes Rivos A Short Exploration of Java Class Pre-Initialization Adoptium Welcomes Google Eclipse Temurin 19 Available Availability of JDK 8u352-b05 Early Access Build A Summary of the July 2022 Retrospectives Eclipse Temurin 8u342, 11.0.16, 17.0.4 and 18.0.2 Available Verifying GPG signatures for Temurin downloads Reproducible Builds at Eclipse Adoptium Eclipse Temurin Linux (RPM/DEB) installer packages Eclipse Temurin JREs are back! Eclipse Temurin 8u312, 11.0.13, and 17.0.1 Available Creating your own runtime using jlink Eclipse Temurin 17 Available Using Jlink in Dockerfiles instead of a JRE Adoptium Celebrates First Release Adoptium to Promote Broad Range of Compatible OpenJDK Builds Eclipse Adoptium Welcomes You
Eclipse Temurin JDK 24 enables JEP 493
Severin Gehwolf · 2025-08-04 · via Adoptium Blog

The releases of Eclipse Temurin 24.0.0+36 and newer will have JEP 493, Linking Run-Time Images without JMODs, enabled. This means that the JDK 24 release archive of Eclipse Temurin will be about 35% smaller. The installed size on-disk will be about 15% smaller. It also means that the release no longer includes the jmods folder. That folder included packaged modules of the JDK and was being used when running the jlink command.

JEP 493 enhances the JDK to use jlink without needing the jmods folder (or packaged modules). jlink will work as before for most use-cases. For example, in order to create a custom runtime with only java.se modules one could create such a runtime as before with the following command (note: the --verbose option was added for explicitness):

$ ./jdk-24+36/bin/jlink --add-modules java.se \
       --output jdk-24.se-only --verbose
Linking based on the current run-time image
java.base jrt:/java.base (run-time image)
java.compiler jrt:/java.compiler (run-time image)
java.datatransfer jrt:/java.datatransfer (run-time image)
java.desktop jrt:/java.desktop (run-time image)
java.instrument jrt:/java.instrument (run-time image)
java.logging jrt:/java.logging (run-time image)
java.management jrt:/java.management (run-time image)
java.management.rmi jrt:/java.management.rmi (run-time image)
java.naming jrt:/java.naming (run-time image)
java.net.http jrt:/java.net.http (run-time image)
java.prefs jrt:/java.prefs (run-time image)
java.rmi jrt:/java.rmi (run-time image)
java.scripting jrt:/java.scripting (run-time image)
java.se jrt:/java.se (run-time image)
java.security.jgss jrt:/java.security.jgss (run-time image)
java.security.sasl jrt:/java.security.sasl (run-time image)
java.sql jrt:/java.sql (run-time image)
java.sql.rowset jrt:/java.sql.rowset (run-time image)
java.transaction.xa jrt:/java.transaction.xa (run-time image)
java.xml jrt:/java.xml (run-time image)
java.xml.crypto jrt:/java.xml.crypto (run-time image)

Providers:
  java.desktop provides java.net.ContentHandlerFactory used by java.base
  java.base provides java.nio.file.spi.FileSystemProvider used by java.base
  java.naming provides java.security.Provider used by java.base
  java.security.jgss provides java.security.Provider used by java.base
  java.security.sasl provides java.security.Provider used by java.base
  java.xml.crypto provides java.security.Provider used by java.base
  java.management.rmi provides javax.management.remote.JMXConnectorProvider used by java.management
  java.management.rmi provides javax.management.remote.JMXConnectorServerProvider used by java.management
  java.desktop provides javax.print.PrintServiceLookup used by java.desktop
  java.desktop provides javax.print.StreamPrintServiceFactory used by java.desktop
  java.management provides javax.security.auth.spi.LoginModule used by java.base
  java.desktop provides javax.sound.midi.spi.MidiDeviceProvider used by java.desktop
  java.desktop provides javax.sound.midi.spi.MidiFileReader used by java.desktop
  java.desktop provides javax.sound.midi.spi.MidiFileWriter used by java.desktop
  java.desktop provides javax.sound.midi.spi.SoundbankReader used by java.desktop
  java.desktop provides javax.sound.sampled.spi.AudioFileReader used by java.desktop
  java.desktop provides javax.sound.sampled.spi.AudioFileWriter used by java.desktop
  java.desktop provides javax.sound.sampled.spi.FormatConversionProvider used by java.desktop
  java.desktop provides javax.sound.sampled.spi.MixerProvider used by java.desktop
  java.logging provides jdk.internal.logger.DefaultLoggerFinder used by java.base
  java.desktop provides sun.datatransfer.DesktopDatatransferService used by java.datatransfer
$ ./jdk-24.se-only/bin/java --version
openjdk 24-beta 2025-03-18
OpenJDK Runtime Environment Temurin-24+36-202502111438 (build 24-beta+36-ea)
OpenJDK 64-Bit Server VM Temurin-24+36-202502111438 (build 24-beta+36-ea, mixed mode)

As you can see, jlink still works. For some of the more uncommon use-cases we provide some frequently asked questions below that you might find helpful.

Should you run into problems with this feature, please report a bug about it here: https://github.com/adoptium/adoptium-support/issues

Frequently Asked Questions (FAQ)

This is what JEP 493 changes. Since Eclipse Temurin 24 enables the feature at build time, jlink will link from the runtime image and will, therefore, no longer need JMODs for creating custom runtimes. The user experience is the same when using jlink. One can check with jlink --help that JEP 493 is enabled:

$ ./jdk-24+36/bin/jlink --help | tail -n2
Capabilities:
      Linking from run-time image enabled

Linking from the runtime image doesn't allow including the jdk.jlink module itself. See "Restrictions" in the JEP. Since the jdk.jlink module, with JEP 493 enabled, includes extra data needed for linking from the runtime image, it has been decided to prevent such multi-hop jlink runs.

With that said, this is actually a jpackage bug. jpackage ought not to perform service bindings for providers in the set of modules that get linked into a default runtime that jpackage generates under the hood. The bug, JDK-8345185, has been fixed in JDK 24.0.2 (July 2025 release). Until then, it's suggested to pass required modules for your application with the --add-modules option of jpackage. Note that the DEFAULT-MODULE-PATH set for JDK 24 without service bindings that JDK 24.0.2 would use is (modulo some application specific modules):

java.rmi,jdk.management.jfr,jdk.jdi,jdk.xml.dom,java.xml,java.datatransfer,
jdk.httpserver,java.desktop,java.security.sasl,jdk.zipfs,java.base,jdk.javadoc,
jdk.management.agent,jdk.jshell,jdk.jsobject,java.sql.rowset,jdk.sctp,
jdk.unsupported,java.smartcardio,java.security.jgss,java.compiler,jdk.nio.mapmode,
jdk.dynalink,jdk.unsupported.desktop,jdk.accessibility,jdk.security.jgss,
jdk.incubator.vector,java.sql,java.transaction.xa,java.logging,java.xml.crypto,
jdk.jfr,jdk.internal.md,jdk.net,java.naming,jdk.internal.ed,java.prefs,
java.net.http,jdk.compiler,jdk.internal.opt,jdk.jconsole,jdk.attach,
jdk.internal.le,java.management,jdk.jdwp.agent,jdk.internal.jvmstat,
java.instrument,jdk.management,jdk.security.auth,java.scripting,jdk.jartool,
java.management.rmi

When I run jlink --add-modules ALL-MODULE-PATH --output myimage I get:

Error: --module-path option must be specified with --add-modules ALL-MODULE-PATH

The relevant upstream OpenJDK change is JDK-8345259. Prior to JDK 24, using --add-modules ALL-MODULE-PATH was equivalent to --add-modules ALL-MODULE-PATH --module-path $JAVA_HOME/jmods which essentially meant to create a runtime with all JDK modules. If this is what you intended to get a "smaller" runtime, then a similar result could be achieved by:

  1. Taking a JDK 24 Eclipse Temurin installation, copy it to a new location. Note that it already doesn't include the jmods folder.
  2. Removing the src.zip file from the lib folder (~51 MB)

If you are really interested in smaller custom runtimes, however, you should not include all JDK modules. I.e. consider using explicit modules in --add-modules clause instead.

As mentioned in the JEP's "Restrictions" section, the default JDK tarball download of Eclipse Temurin 24 is not sufficient to create a custom runtime for a different platform other than the one driving jlink for the lack of included JMODs. For example, creating a runtime on Linux x64 for the Windows x64 platform.

For those use-cases you can download the JMODs for a given Eclipse Temurin release via the Adoptium API and use them to generate a JDK for the desired platform.

For example, to generate a Windows x64 JDK on Linux x64 you could use the following sequence of commands (in a bash terminal):

$ mkdir jdk-24.0.2 jdk-24.0.2-win-x64-jmods
$ curl -OJLs https://api.adoptium.net/v3/binary/latest/24/ga/linux/x64/jdk/hotspot/normal/eclipse # Linux x64 JDK
$ pushd jdk-24.0.2
$ tar -xf ../OpenJDK24U-jdk*.tar.gz --strip-components=1
$ popd
$ curl -OJLs https://api.adoptium.net/v3/binary/latest/24/ga/windows/x64/jmods/hotspot/normal/eclipse # Windows x64 JMODs
$ pushd jdk-24.0.2-win-x64-jmods
$ unzip -d tmp ../OpenJDK24U-jmods*.zip
$ mv tmp/jdk-24*jmods/*.jmod .
$ rmdir tmp/jdk-24*jmods
$ rmdir tmp
$ popd
$ pushd jdk-24.0.2
$ ./bin/jlink --module-path ../jdk-24.0.2-win-x64-jmods \
            --add-modules ALL-MODULE-PATH \
            --output ../jdk-24.0.2-x64-win
$ popd
$ ./jdk-24.0.2-x64-win/bin/java.exe --version
./jdk-24.0.2-x64-win/bin/java.exe: cannot execute binary file: Exec format error

This downloads the JDK 24.0.2 general availability release of Eclipse Temurin for the x64 Linux platform via the Adoptium API and extracts it using the tar and unzip utilities to folder jdk-24.0.2, and jdk-24.0.2-win-x64-jmods respectively. The JMODs for platform x64 Windows are then available in folder jdk-24.0.2-win-x64-jmods next to the jdk-24.0.2 folder for jlink to pick them up. Then jlink from the jdk-24.0.2 installation is invoked telling it to use a module path of jdk-24.0.2-win-x64-jmods and adding the ALL-MODULE-PATH argument to --add-modules will tell jlink to use all modules from the x64 Windows JMODs and will assemble the x64 Windows JDK in folder jdk-24.0.2-x64-win. The result in jdk-24.0.2-x64-win will of course not run on the host platform - x64 Linux. It would need to be transferred to a x64 Windows machine for it to be run.