一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Gradle中的版本使用

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-09-25 15:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

今天帶大家了解一下 Gradle 中 sourceCompatiblity 和 targetCompatibility 的使用配置和區(qū)別。如果有對 Gradle 不太了解的朋友可以看我們之前的一些文章。

Java 中的版本處理

在了解 Gradle 中的 sourceCompatiblity 和 targetCompatibility 之前, 我們先來看看 Java 在編譯的時候,是怎么處理版本號的。

當(dāng)我們使用javac編譯一個Java程序時,我們可以為版本處理提供以下兩個關(guān)閉版本的編譯選項。

  • -source 指的是我們的 Java 代碼的語言版本和編譯的 JDK 相匹配(例如,1.8代表JDK8)。我們所提供的版本值將限制源代碼中使用的語言特性,使其符合各自的Java版本。
  • -target 指的是控制生成的類文件的版本。也就是說我們提供的版本值將是我們的程序可以運行的最低Java版本。

舉個例子

javac HelloWorld.java -source 1.6 -target 1.8

上面的命令的意思就是 程序的運行環(huán)境需要支持JDK 1.8 也就是 Java 8, 而源碼中不能包含 Java 6 以上版本的語言特性,比如說 Lambda 表達(dá)式等等。

Gradle 中的版本使用

Gradle 中需要依賴Java插件,然后通過一個叫 java 的 task 來配置 sourceCompatibility 和 targetCompatibility 屬性,也就是 javac 中的 -source-target 編譯選項。

讓我們來設(shè)置build.gradle文件

plugins {
    id 'java'
}

group 'cn.javanorth'

java {
    sourceCompatibility = "1.6"
    targetCompatibility = "1.8"
}

通過一個例子來驗證一下

我們創(chuàng)建一個叫 HelloWorld 的控制臺程序來進(jìn)行測試,創(chuàng)建一個 HelloWorldApp 的 class。

public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

好,我們使用 gradle build 命令來編譯下,我們可以看到生成了一個 HelloWorldApp.class 的文件。

我們通過使用 javap 命令行工具來檢查這個class 的字節(jié)碼版本號。

javap -verbose HelloWorldApp.class

輸出結(jié)果如下:

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 表達(dá)式。

public class HelloWorldApp {

    public static void main(String[] args) {
        Runnable helloLambda = () - > {
            System.out.println("Hello World!");
        }
        helloLambda.run();
    }
}

我們嘗試使用 gradle 進(jìn)行編譯, 可以看到有一個編譯錯誤。

error: lambda expressions are not supported in -source 1.6

-source選項相當(dāng)于Gradle 配置中 sourceCompatibility,可以讓我們的代碼在編譯過程中提前發(fā)現(xiàn)問題,如果我們不想引入更高的版本特性,使用這個選項可以確保我們不會誤用這些特性。比如說我們可能希望我們的應(yīng)用程序也能在Java 6 runtime 上運行。

總結(jié)

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    2989

    瀏覽量

    109797
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    671

    瀏覽量

    30346
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    34004
  • gradle
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    886
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    Gradle版本目錄功能的簡單應(yīng)用

    。 0. 概述 Gradle 版本目錄是 Gradle7 引入的新功能。使用 Gradle 版本
    的頭像 發(fā)表于 09-30 11:12 ?1818次閱讀

    Gradle構(gòu)建的多模塊Spring Boot項目

    0. 前言 相比起 Maven 的 XML 配置方式,Gradle 提供了一套簡明的 DSL 用于構(gòu)建Java 項目,使我們就像編寫程序一樣編寫項目構(gòu)建腳本。 本文將從無到有創(chuàng)建一個用 Gradle
    的頭像 發(fā)表于 09-25 14:46 ?3664次閱讀
    <b class='flag-5'>Gradle</b>構(gòu)建的多模塊Spring Boot項目

    gradle安裝與配置unity

    ://gradle.org/install/)并下載適用于你的操作系統(tǒng)的最新版本Gradle。根據(jù)你的操作系統(tǒng),選擇相應(yīng)的發(fā)行版并根據(jù)指示進(jìn)行
    的頭像 發(fā)表于 12-07 14:48 ?3159次閱讀

    Android Studio與Gradle深入

    ://jcenter.bintray.com/" }  下載不到特定的版本  Maven 和 Gradle 都會有一個緩存庫,默認(rèn)安裝的情況下,是在用戶根目錄下的 .m2 或者 .gradle 文件夾
    發(fā)表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    發(fā)表于 07-16 15:50

    HarmonyOS初步探索04:使用DevEco Studio時設(shè)置Gradle倉庫代替

    /huawei-gradlebuild/”} } 依賴項{ // gradle-intellij-plugin用于構(gòu)建JetBrains插件//請確保始終升級到最新版本// http
    發(fā)表于 12-15 14:26

    DevEco報錯不能順利進(jìn)入gradle8.0怎么解決?

    報錯內(nèi)容為:此版本中使用了已棄用的 Gradle 功能,使其與 Gradle 8.0 不兼容。翻譯一下,大概有些人說這個中外使用了Gradle的特性,但它應(yīng)該與
    發(fā)表于 04-21 11:15

    谷歌 Android Studio 和 Gradle 插件使用全新版本編號

    在 Canary 通道已正式發(fā)布。在此版本,調(diào)整了 Android Studio 和 Gradle 插件的版本編號方案。此項變更將 Gradle
    的頭像 發(fā)表于 12-11 10:49 ?1882次閱讀

    gradle和gradlew的區(qū)別?

    你會注意到輸出里打印了 Gradle版本,它對應(yīng)著你運行的 gradle 命令在設(shè)備Gradle 安裝包
    的頭像 發(fā)表于 12-13 09:57 ?2011次閱讀

    Gradle入門知識之Gradle詳解

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發(fā)現(xiàn)有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發(fā)表于 03-30 10:47 ?2804次閱讀
    <b class='flag-5'>Gradle</b>入門知識之<b class='flag-5'>Gradle</b>詳解

    Gradle入門知識之Gradle詳解(下)

    大家回想一下自己第一次接觸`Gradle`是什么時候? 相信大家也都是和我一樣,在我們打開第一個AS項目的時候, 發(fā)現(xiàn)有很多帶gradle字樣的文件:`setting.gradle, build.
    的頭像 發(fā)表于 03-30 10:51 ?1121次閱讀
    <b class='flag-5'>Gradle</b>入門知識之<b class='flag-5'>Gradle</b>詳解(下)

    Gradle入門知識之Gradle語法1

    很多開發(fā)喜歡把`Gradle`簡單定義為一種構(gòu)建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構(gòu)建,但是如果簡單得把Gradle拿來做構(gòu)建,就太小看Gradle
    的頭像 發(fā)表于 03-30 10:54 ?1276次閱讀
    <b class='flag-5'>Gradle</b>入門知識之<b class='flag-5'>Gradle</b>語法1

    Gradle入門知識之Gradle語法2

    很多開發(fā)喜歡把`Gradle`簡單定義為一種構(gòu)建工具,和`ant,maven`等作用類似, 誠然Gradle確實是用來做構(gòu)建,但是如果簡單得把Gradle拿來做構(gòu)建,就太小看Gradle
    的頭像 發(fā)表于 03-30 10:54 ?926次閱讀

    Gradle Plugin和AGP的區(qū)別1

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`Gradle`構(gòu)建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發(fā)表于 03-30 11:48 ?1497次閱讀
    <b class='flag-5'>Gradle</b> Plugin和AGP的區(qū)別1

    Gradle Plugin和AGP的區(qū)別3

    Gradle Plugin`和`AGP`的區(qū)別? `Gradle Plugin`是`Gradle`構(gòu)建過程中使用的插件的總稱,而`Android Gradle Plugin`是這
    的頭像 發(fā)表于 03-30 11:50 ?1494次閱讀