成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Gradle: 我能控制你能不能編譯運行

開發 前端
在這篇文章中,我們了解如何使用 -source? 和 -target 編譯選項來處理我們的Java源代碼和目標運行時的版本。我們還可以通過Gradle 的 sourceCompatbility 和 targetCompatibility 配置使用這些編譯選項。

大家好,我是指北君。

今天帶大家了解一下 Gradle 中 sourceCompatiblity 和 targetCompatibility 的使用配置和區別。

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技術指北
相關推薦

2013-04-19 10:42:02

打車軟件大數據

2020-12-03 07:39:50

HashMap底層數據

2019-11-21 09:25:23

AI 數據人工智能

2021-05-18 12:35:00

Divdom產品經理

2016-05-19 17:10:27

銀行

2021-02-26 21:25:08

比特幣投資貨幣

2022-10-20 08:00:37

機器人ZadigChatOps

2020-10-16 18:33:18

Rust語言前端開發

2025-04-22 08:00:00

2023-04-06 06:55:24

ChatGPTGPT算力

2022-04-24 11:52:04

元宇宙Web3去中心化

2012-06-13 11:01:59

英特爾

2025-01-26 16:01:13

C++靜態成員函數

2023-12-27 08:03:53

Go優化代碼

2020-12-21 15:09:23

人工智能安全人臉識別

2010-04-13 10:02:16

索引

2024-04-26 09:37:43

國產數據庫開發者

2024-04-29 08:52:49

2011-12-06 10:06:33

云存儲

2022-11-07 08:36:11

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲经典一区 | 欧美日韩精品久久久免费观看 | 久久精品91久久久久久再现 | 国产精品视频一区二区三区不卡 | 久久专区 | 天天操天天摸天天干 | 免费观看av| 国产乱肥老妇国产一区二 | 四季久久免费一区二区三区四区 | 国产精品九九九 | 日韩三级在线 | 高清av一区| 中日韩欧美一级片 | 一本久久a久久精品亚洲 | 精品国产乱码久久久久久88av | 日韩电影中文字幕 | 日日夜夜草 | 国产欧美综合在线 | 99精品视频在线观看 | 欧美一级大片 | 成人免费网站视频 | 国产精品不卡一区 | 国产高清视频一区二区 | 九一视频在线播放 | 欧美日韩中文字幕在线 | 三区四区在线观看 | 亚洲精品在线观看网站 | 日本a网站 | 成人精品视频 | 久久久久久综合 | 四虎影音 | 91视频在线看 | 日韩精品成人网 | 一级黄色av电影 | 欧美黄色录像 | 日本精品久久久一区二区三区 | 美日韩免费视频 | 日本一道本| 久久久久久亚洲国产精品 | 狠狠av| 紧缚调教一区二区三区视频 |