Introduction
Usually, a project has a minimum Java version requirement and that applies to all of its modules. But every rule has its exceptions, as recently I stumbled on the following issue.
One open source project of mine mandates Java 1.6 for most of its modules, except one requiring the 1.7 version.
This happens when integrating external libraries having different Java requirements than your own project.
Because that one module integrates the DBCP2 framework (supporting at least Java 1.7), I need to instruct Maven to use two different Java compilers.
Environment variables
We need to define the following environment variables
| Environment Variable Name | Environment Variable Value |
|---|---|
| JAVA_HOME_6 | C:\Program Files\Java\jdk1.6.0_38 |
| JAVA_HOME_7 | C:\Program Files\Java\jdk1.7.0_25 |
| JAVA_HOME | %JAVA_HOME_6% |
The parent pom.xml
The parent pom.xml defines the global java version settings
<properties>
<jdk.version>6</jdk.version>
<jdk>${env.JAVA_HOME_6}</jdk>
</properties>We need to instruct both the compiler and the test plugins to use the configured java version.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${jdk.version}</source>
<target>${jdk.version}</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<executable>${jdk}/bin/javac</executable>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<jvm>${jdk}/bin/java</jvm>
<forkMode>once</forkMode>
</configuration>
</plugin>
</plugins>
</build>The specific module pom.xml
Those modules requiring a different java version, just need to override the default settings:
<properties>
<jdk.version>7</jdk.version>
<jdk>${env.JAVA_HOME_7}</jdk>
</properties>And thatβs it, we can now build each modules using its own specific minimum java version requirement.
| Reference: | Maven and Java multi-version modules from our JCG partner Vlad Mihalcea at the Vlad Mihalceaβs Blog blog. |
Thank you!
We will contact you soon.
Vlad MihalceaApril 16th, 2014Last Updated: April 16th, 2014

This site uses Akismet to reduce spam. Learn how your comment data is processed.
Do you really need different JDKs? Canβt you just specify source and target versions and use JDK7?
I really really need different JDKs, thatβs an open source trait I cannot escape. When we develop commercial software, the project scope is quite narrow, so it makes sense to benefit from the latest advancements in the Java language. Open source frameworks are designed for larger scopes, and since there are still many platforms that havenβt yet migrated to 1.7, itβs wise to support 1.6 too.