How to run Chronicle Libraries Under Java 17
On 14 September 2021, the long awaited Java 17 LTS version was released providing numerous improvements compared to older versions of Java such as improved performance, stability and security. To gain access to these improvements using the Chronicle libraries, there are some command line parameters that need to be passed in. In this short article we will describe how to do it.
Chronicle Java 17 Support
Starting from chronicle-bom-2.22ea26, all new releases can be run under Java 17 when run on the class path (but not yet under the module path).
Strongly Encapsulated JDK Internals
One of the features introduced in Java 17 was “Strongly Encapsulated JDK Internals” as described in JEP 403 with the objective of providing a more robust and secure execution environment. Because Chronicle leverages tight integration with a small number of JDK internals to maintain high and consistent performance, there are some procedures that need to be executed in order to migrate to Java 17.
Command Line Parameters
When starting a JVM explicitly using the “java” command, the following command line parameters need to be passed in:
--add-exports=java.base/jdk.internal.ref=ALL-UNNAMED --add-exports=java.base/sun.nio.ch=ALL-UNNAMED --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED
In many cases, these parameters can be added via the environment variable JAVA_OPTS as similarly described in the next section.
If you are using Maven to run code (e.g. using exec-maven-plugin exec:java), then you can set the MAVEN_OPTS environment variable as shown hereunder:
export MAVEN_OPTS="\ --add-exports java.base/jdk.internal.ref=ALL-UNNAMED \ --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \ --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED \ --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \ --add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED \ --add-opens=java.base/java.lang=ALL-UNNAMED \ --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \ --add-opens=java.base/java.io=ALL-UNNAMED \ --add-opens=java.base/java.util=ALL-UNNAMED"
Even though not strictly required, we recommend providing the same command line options for Java 11 as for Java 17 as this will remove some warnings in the output logs.
Want access to exclusive Chronicle content?
The Chronicle Community is now live, hit the button below and join the community, for free! You'll get exclusive access to blogs, guides and video content. Join today!