13

I have an existing Spring boot App that i build through gradle . All these days I have been using JDK / JRE 8 and now I am trying to use JDK-11

So to check the Compatability, I am setting the JAVA_HOME to JDK-11 but trying to compile in Java 8 mode

I added the below block in my build.gradle

compileJava {
    targetCompatibility = '1.8'
}

and then I set JAVA_HOME explicitly set JAVA_HOME=C:\Users\arun\Desktop\jdk-11.0.1

and then execute gradlew clean build

But I am stopped with the below exception

> Configure project :
Build Version = build-182-ga03cf6c

> Task :compileJava FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileJava'.
> warning: source release 11 requires target release 11

How to point my JAVA_HOME to JDK-11 but still execute it in Java-8 mode ?

Arun
  • 3,440
  • 11
  • 60
  • 108
  • 2
    They should ideally provide a `--release` equivalent parameter choice now as Maven does. `` – Naman Jan 11 '19 at 13:20

3 Answers3

13

I'd say :

sourceCompatibility = '1.8'
targetCompatibility = '1.8'

Because the default value of sourceCompatibility is the version of the current JVM in use.

source : https://docs.gradle.org/current/userguide/java_plugin.html

Tristan
  • 8,733
  • 7
  • 48
  • 96
5

you need to set the sourceCompatibility too.

See this post here Gradle, "sourceCompatibility" vs "targetCompatibility"?

Rolf
  • 81
  • 4
3

As of Java 9 you can use the --release N option to cross-compile with Gradle. Setting the sourceCompatibility and targetCompatibility is not enough because in that case you need to set the bootClasspath to JDK N too. See What is the --release flag in the Java 9 compiler? for more details.

Instead, use the Java 9+ "--release" compilerArg like this:

compilerArgs.addAll(['--release', '8'])

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.compile.CompileOptions.html

whitestryder
  • 451
  • 5
  • 10