'Create Java 8 and Java 11 build for single API
We are working to upgrade our API from Java 8 to Java 11.
However we need to support Java 8 and Java 11 both at same time because all clients are not ready to move on Java 11.
Is it possible if we can create maven build with Java 8 and Java 11 without duplicate our repository and without any change in pom.xml each time before create build for Java 8 and Java 11?
Generated artifact should have different name to distinguish Java 8 and Java 11 versions something like xyz-jdk8-0.0.1.jar and xyz-jdk11-.0.1.jar
Solution 1:[1]
You should:
- Remove from you POM, if present,
maven.compiler.sourceandmaven.compiler.target. - Set
JAVA_HOME=<<JAVA_8_HOME_FOLDER>>. - Build from Java 8 by
mvn clean install. - Take the Java 8 artifact.
- Set
JAVA_HOME=<<JAVA_11_HOME_FOLDER>>. - Build from Java 11 by
mvn clean install. - Take the Java 11 artifact.
Solution 2:[2]
TL;DR
You don't need that, just build to Java 8 and be happy!
Solving
You can use Maven Build Profiles for this: https://maven.apache.org/guides/introduction/introduction-to-profiles.html
1. Set your properties to Java 11:
<properties>
<maven.compiler.target>11</maven.compiler.target>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.release>11</maven.compiler.release>
</properties>
2. Set your final name:
<build>
<finalName>${project.artifactId}-jdk11-${project.version}</finalName>
</build>
3. Add a profile:
<profile>
<id>jdk-8</id>
<properties>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.release>1.8</maven.compiler.release>
</properties>
<build>
<finalName>${project.artifactId}-jdk8-${project.version}</finalName>
</build>
</profile>
4. Build:
You will need to run 2 builds, one normal, and other activating the JDK 8 profile:
$ mvn ...
$ mvn ... -P jdk-8
Considerations:
- Always use JDK 11 as it can confidently build Java 8 targets;
- You don't need target and source properties, but if some plugin fails, put it back.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Antonio Petricca |
| Solution 2 |
