Maven and Java multi-version modules

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.

If you have enjoyed reading my article and you’re looking forward to getting instant email notifications of my latest posts, you just need to follow my blog.

About these ads

One thought on “Maven and Java multi-version modules

  1. Pingback: The Baeldung Weekly Review 15

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s