@rfscholte#Devoxx #Maven
Java 9 and the impact on
Maven Projects
Robert Scholte
Chairman Apache Maven
CGI
@rfscholte#Devoxx #Maven
Tools in Actions
• Migrating an example project to Java9
@rfscholte#Devoxx #Maven
History
April 2014: Java 9 Early Access releases
No remarkable issues when running with Maven
September 2015: Jigsaw Early Access releases
99%+ of the Java Maven projects failed to compile
OpenJDK fixed issue and released within 72h!
zero LOCs changed in Maven core codebase to run on Java 9
@rfscholte#Devoxx #Maven
Maven by Example
Chapter 7
Multi-Module Enterprise Project
“In this chapter, we create a multi-module project
that evolves the examples from Chapter 6 and
Chapter 5 into a project that uses the Spring
Framework and Hibernate to create both a simple
web application and a command-line utility to read
data from the Yahoo Weather feed.”
@rfscholte#Devoxx #Maven
Multi-Module Enterprise Project
Adjustments:
• Added m-shade-plugin to :simple-command
• Locked maven-jar-plugin to latest 2.x (= 2.6)
• Locked maven-war-plugin to latest 2.x (=2.6)
• Add hbm2ddl=create persist config-files
@rfscholte#Devoxx #Maven
Baseline
• Maven 3.4.0-SNAPSHOT (colorized output)
• JDK 1.8.0_040 / jigsaw-jdk-9-ea+142
@rfscholte#Devoxx #Maven
Source / Target option 1.5
is no longer supported.
Java 5 compatible?
• Configure maven-toolchain-plugin
Java 6 compatible?
• Set source/target to 1.6
• Replace source/target with release 6
• (requires maven-compiler-plugin 3.6.0)
@rfscholte#Devoxx #Maven
Caused by: j.l.AIOOBException: 1
JEP 223: New Version-String Scheme (project Verona)
System Property Existing Proposed
java.version 1.9.0 9
java.runtime.version 1.9.0-b100 9+100
java.vm.version 1.9.0-b100 9+100
java.specification.version 1.9 9
java.vm.specification.version 1.9 9
@rfscholte#Devoxx #Maven
version.split(“.”)[1]
maven-archiver-3.0.1
- maven-jar-plugin-3.0.0
- maven-war-plugin-3.0.0
- maven-ear-plugin-xxx
- maven-assembly-plugin-xxx
maven-javadoc-plugin-2.10.4
…
@rfscholte#Devoxx #Maven
j.l.reflect.InaccessibleObjectExcepti
on
jigsaw-jdk-9-ea+135 #AwkwardStrongEncapsulation
Options:
• Xstream fix (not available yet)
• Improved support project Jigsaw
• maven-war-plugin could think of other implementation
• Don’t create war
• Use jigsaw-jdk-9-ea+134 or earlier as Maven JRE
(but compile with jigsaw-jdk-9-ea+141)
@rfscholte#Devoxx #Maven
modules are not supported in -source
1.6
Options:
• Set release=9
• Apply recipe “Older projects with module-info”
• maven-compiler-plugin with 2 execution-blocks
@rfscholte#Devoxx #Maven
Split packages
“If two or more JAR files on the class path contain types in
the same package then at most one of them can be used
as an automatic module, since the module system still
guarantees that every named module reads at most one
named module defining a given package and that named
modules defining identically-named packages do not
interfere with each other.”
Option (just one): upgrade/replace dependencies
@rfscholte#Devoxx #Maven
How to continue
• Not all Java9/jigsaw changes are related to Maven
• There will be Maven recipes to help migrating to Java 9
@rfscholte#Devoxx #Maven
Thank you
Java 9 and the impact on Maven Projects
Robert Scholte
Please rate & give feedback on this talk

Java 9 and the impact on Maven Projects (Devoxx 2016)