In all of my projects, I use gradle and specify the following:
sourceCompatibility = "1.7"; // for example
targetCompatibility = "1.7"; // defaults to sourceCompatibility
Now, I have three different versions of the JDK installed, from 1.6 to 1.8. In order to switch from one version to another, I source
shell files to change PATH
, JAVA_HOME
and even JDK_HOME
.
By accident it can happen that I use the wrong JDK version and I don't want that... Is there a possibility to check that the compiler version is equal to targetCompatibility before attempting any compilation task?
Answer to self, and thanks to @JBNizet for providing the initial solution...
The solution is indeed to use JavaVersion
, and it happens that both sourceCompatibility
and targetCompatibility
accept a JavaVersion
as an argument...
Therefore the build file has become this:
def javaVersion = JavaVersion.VERSION_1_7;
sourceCompatibility = javaVersion;
targetCompatibility = javaVersion; // defaults to sourceCompatibility
And then the task:
task enforceVersion << {
def foundVersion = JavaVersion.current();
if (foundVersion != javaVersion)
throw new IllegalStateException("Wrong Java version; required is "
+ javaVersion + ", but found " + foundVersion);
}
compileJava.dependsOn(enforceVersion);
And it works:
$ ./gradlew clean compileJava
:clean UP-TO-DATE
:enforceVersion FAILED
FAILURE: Build failed with an exception.
* Where:
Build file '/home/fge/src/perso/grappa-tracer-backport/build.gradle' line: 55
* What went wrong:
Execution failed for task ':enforceVersion'.
> Wrong Java version; required is 1.7, but found 1.8