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

推荐订阅源

月光博客
月光博客
IT之家
IT之家
Hugging Face - Blog
Hugging Face - Blog
J
Java Code Geeks
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
MyScale Blog
MyScale Blog
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
Google DeepMind News
Google DeepMind News
Engineering at Meta
Engineering at Meta
The Cloudflare Blog
Martin Fowler
Martin Fowler
酷 壳 – CoolShell
酷 壳 – CoolShell
N
Netflix TechBlog - Medium
MongoDB | Blog
MongoDB | Blog
I
InfoQ
WordPress大学
WordPress大学
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
H
Help Net Security

Adoptium Blog

JDK 27 Will No Longer Be Built for macOS x64 Eclipse Temurin 8u504, 11.0.32.1, 17.0.20.1, 21.0.12.1, 25.0.4.1 and 26.0.2.1 Available Eclipse Temurin Reproducible Verification Builds — August 2026 Update Eclipse Temurin 8u502, 11.0.32, 17.0.20, 21.0.12, 25.0.4 and 26.0.2 Available 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
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.