今天帶大家了解一下 Gradle 中 sourceCompatiblity 和 targetCompatibility 的使用配置和區別。如果有對 Gradle 不太了解的朋友可以看我們之前的一些文章。
Java 中的版本處理
在了解 Gradle 中的 sourceCompatiblity 和 targetCompatibility 之前, 我們先來看看 Java 在編譯的時候,是怎么處理版本號的。
當我們使用javac編譯一個Java程序時,我們可以為版本處理提供以下兩個關閉版本的編譯選項。
- -source 指的是我們的 Java 代碼的語言版本和編譯的 JDK 相匹配(例如,1.8代表JDK8)。我們所提供的版本值將限制源代碼中使用的語言特性,使其符合各自的Java版本。
- -target 指的是控制生成的類文件的版本。也就是說我們提供的版本值將是我們的程序可以運行的最低Java版本。
舉個例子
javac HelloWorld.java -source 1.6 -target 1.8
上面的命令的意思就是 程序的運行環境需要支持JDK 1.8 也就是 Java 8, 而源碼中不能包含 Java 6 以上版本的語言特性,比如說 Lambda 表達式等等。
Gradle 中的版本使用
Gradle 中需要依賴Java插件,然后通過一個叫 java 的 task 來配置 sourceCompatibility 和 targetCompatibility 屬性,也就是 javac 中的 -source
和 -target
編譯選項。
讓我們來設置build.gradle文件
plugins {
id 'java'
}
group 'cn.javanorth'
java {
sourceCompatibility = "1.6"
targetCompatibility = "1.8"
}
通過一個例子來驗證一下
我們創建一個叫 HelloWorld 的控制臺程序來進行測試,創建一個 HelloWorldApp 的 class。
public class HelloWorldApp {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
好,我們使用 gradle build 命令來編譯下,我們可以看到生成了一個 HelloWorldApp.class 的文件。
我們通過使用 javap 命令行工具來檢查這個class 的字節碼版本號。
javap -verbose HelloWorldApp.class
輸出結果如下:
public class cn.javanorth.helloworld.HelloWorldApp
minor version: 0
major version: 52
flags: ACC_PUBLIC, ACC_SUPER
這里的主版本號是52,也就是 Java 8 class 文件的版本號。這就意味著 HelloWorldApp.class 只能運行在 JDK 1.8 以上版本。
再來測試一下 sourceCompatibility, 我修改一下代碼,增加一個 Java 6 沒有的特性,比如說 Lambda 表達式。
public class HelloWorldApp {
public static void main(String[] args) {
Runnable helloLambda = () - > {
System.out.println("Hello World!");
}
helloLambda.run();
}
}
我們嘗試使用 gradle 進行編譯, 可以看到有一個編譯錯誤。
error: lambda expressions are not supported in -source 1.6
-source選項相當于Gradle 配置中 sourceCompatibility,可以讓我們的代碼在編譯過程中提前發現問題,如果我們不想引入更高的版本特性,使用這個選項可以確保我們不會誤用這些特性。比如說我們可能希望我們的應用程序也能在Java 6 runtime 上運行。
總結
在這篇文章中,我們了解如何使用 -source
和 -target
編譯選項來處理我們的Java源代碼和目標運行時的版本。我們還可以通過Gradle 的 sourceCompatbility 和 targetCompatibility 配置使用這些編譯選項。
-
JAVA
+關注
關注
19文章
2966瀏覽量
104702 -
源碼
+關注
關注
8文章
639瀏覽量
29185 -
編譯
+關注
關注
0文章
657瀏覽量
32852 -
gradle
+關注
關注
0文章
26瀏覽量
708
發布評論請先 登錄
相關推薦
評論