How do I tell Gradle to use specific JDK version?
How do I tell Gradle to use specific JDK version?
Question
I can't figure out to get this working.
Scenario:
- I have an application built with gradle
- The application uses JavaFX
What I want
- Use a variable (defined per developer machine) which points to an installation of a JDK which will be used for building the whole application / tests / ...
I thought about having the gradle.properties
file, defining the variable. Something like
JAVA_HOME_FOR_MY_PROJECT=<path to my desired JDK>
What I don't want
- point
JAVA_HOME
to the desired JDK
I could live with many suggestions:
- a solution that defines a system environment variable which I'm able to check in my build.gradle script
- a variable defined in gradle.properties
- overriding the JAVA_HOME variable only for the build context (something like
use JAVA_HOME=<my special JDK path defined somewhere else defined>
) - something else I didn't think about
Question:
- How to wire a variable (how ever defined, as variable in the
gradle.properties
, system environment variable, ...) to the build process?
I have more than one JDK7 available and need to point to a special version (minimum JDK_u version).
Any answer is appreciated and I'm thankful for every hint to the right direction.
Accepted Answer
Two ways
- In
gradle.properties
in the.gradle
directory in yourHOME_DIRECTORY
setorg.gradle.java.home=/path_to_jdk_directory
or:
In your
build.gradle
compileJava.options.fork = true compileJava.options.forkOptions.executable = '/path_to_javac'
Popular Answer
If you add JDK_PATH in gradle.properties your build become dependent on on that particular path. Instead Run gradle task with following command line parametemer
gradle build -Dorg.gradle.java.home=/JDK_PATH
This way your build is not dependent on some concrete path.
Read more... Read less...
To people ending up here when searching for the Gradle equivalent of the Maven property maven.compiler.source
(or <source>1.8</source>
):
In build.gradle you can achieve this with
apply plugin: 'java'
sourceCompatibility = 1.8
targetCompatibility = 1.8
See the Gradle documentation on this.
If you are executing using gradle wrapper, you can run the command with JDK path like following
./gradlew -Dorg.gradle.java.home=/jdk_path_directory
If you are using linux and gradle wrapper you can use following solution.
Add path to local.properties file:
javaHome=<path to JDK>
Add to your gradlew script file:
DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )
source $DIR/local.properties 2>/dev/null
if ! [ -z "$javaHome" ]
then
JAVA_HOME=$javaHome
fi
In this solution, each developer can set his own JDK path. File local.properties
shouldn't be included in version control system.
I added this line in my GRADLE_HOME/bin/gradle file -
export JAVA_HOME=/path/to/java/version
There is one more option to follow. In your gradle tasks, you can set your desired jdk path. (I know this is a while since the question was posted. This answer can help someone.)
Right click on the deploy or any other task and select "Open Gradle Run Configuration..."
Then navigate to "Java Home" and paste your desired java path.
Please note that, bin will be added by the gradle task itself. So don't add the "bin" to the path.