How to specify Java Source and Target Compatibility in a Gradle multi project

I have a multiple project setup and I want to build top level projects using different JDKs.

I did some experiments by myself and the following configuration worked for me
(using gradle 3.1 and the wrapper function).

At the root level my gradle.properties file looks like this:

[code]
org.gradle.daemon=true
JDK7_HOME=/usr/lib/jvm/jdk-7-oracle-x64
JDK8_HOME=/usr/lib/jvm/oracle-java8-jdk-amd64
[/code]

Default JDK should be JDK 7. So I defined this in my root build.gradle file

[code]

subprojects {

apply plugin: ‚java‘
sourceCompatibility = 1.7
targetCompatibility = 1.7

compileJava.doFirst {
println ’source compatibility: ‚ + sourceCompatibility
println ‚targetCompatibility: ‚ + targetCompatibility
}

tasks.withType(JavaCompile) {
if (project.hasProperty(‚JDK7_HOME‘)) {
options.fork = true
options.bootClasspath = ‚$JDK7_HOME/jre/lib/rt.jar:$JDK7_HOME/jre/lib/jce.jar‘
}
}

test.doFirst {
println ‚executing tests with JDK ‚ + test.executable
}

tasks.withType(Test) {
if (project.hasProperty(‚JDK7_HOME‘)) {
test.executable = ‚$JDK7_HOME/bin/java‘
}
}

}

[/code]

With this configuration the source and target compatibility is now set to 1.7 for every
sub project. I use compileJava.doFirst and test.doFirst to verify that everything works as expected.

Now, in my sub project B I want to use Java 8. The following did the trick:
build.gradle

[code]

tasks.withType(JavaCompile) {
if (project.hasProperty(‚JDK8_HOME‘)) {
sourceCompatibility = 1.8
targetCompatibility = 1.8
options.fork = true
options.bootClasspath = ‚$JDK8_HOME/jre/lib/rt.jar:$JDK8_HOME/jre/lib/jce.jar‘;
}
}

tasks.withType(Test) {
if (project.hasProperty(‚JDK8_HOME‘)) {
test.executable = ‚$JDK8_HOME/bin/java‘
}
}

[/code]

That it’s. I hope this has helped you.

If not, please check these ones:

http://stackoverflow.com/questions/21028438/gradle-sourcecompatibility-has-no-effect-to-subprojects

http://stackoverflow.com/questions/16679593/gradle-compilejava-task-warning-options-bootstrap-class-path-not-set-in-conju

http://stackoverflow.com/questions/30571210/how-configure-multiple-gradle-properties-files-in-gradle-for-multiple-projects

 

Consent Management Platform von Real Cookie Banner