在 Gradle 使用不同版本的 JDK 進行 Compile

在同時進行不同專案時往往需要指定 JDK 的版本, 像 JDK 1.4, 1.5, 1.6 等等. 不過 gradle 的 document 可沒有特別說要怎麼做這方面的設定, 所以這個問題困擾了我一小段時間. 今天總算在這裡看到蛛絲馬跡了:
http://gradle.1045684.n5.nabble.com/Using-modules-to-separate-JDK-dependencies-td1434979.html

答案在 Compile 這個 task 裡的 options 這個參數, 它的型態是 CompileOptions. 找其它的 API document 後, 可以看到 fork(forkArgs) 這個方法, 對於比較瞭解 Ant Javac Task 的觀眾, 到此應該已經知道怎麼一回事了.

簡單地說 fork 是用來指定執行另一個 javac 進行 compile, 而不使用當前的 jdk(也就是 gradle 使用的). 因此只要呼叫 fork 這個方法, 指定 javac 的路徑, 就可以在不同的 Compile task(如: compileXXXJava) 使用不同版本的 jdk 進行 compile.

build.gradle 裡大概會是這個樣子:

JAVA_HOME = 'path-to-java14-home'
sourceSets {
    ....
}
compileJava {
 options.fork(executable: "$JAVA_HOME/bin/javac")
}
compileXXXJava {
    options.fork(executable: "$JAVA_HOME/bin/javac")
}

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s