0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Gradle中的版本使用

科技绿洲 来源:Java技术指北 作者:Java技术指北 2023-09-25 15:32 次阅读

今天带大家了解一下 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

    文章

    2957

    浏览量

    104544
  • 源码
    +关注

    关注

    8

    文章

    633

    浏览量

    29138
  • 编译
    +关注

    关注

    0

    文章

    653

    浏览量

    32806
  • gradle
    +关注

    关注

    0

    文章

    26

    浏览量

    699
收藏 人收藏

    评论

    相关推荐

    Gradle版本目录功能的简单应用

    。 0. 概述 Gradle 版本目录是 Gradle7 引入的新功能。使用 Gradle 版本
    的头像 发表于 09-30 11:12 1273次阅读

    Gradle构建的多模块Spring Boot项目

    0. 前言 相比起 Maven 的 XML 配置方式,Gradle 提供了一套简明的 DSL 用于构建Java 项目,使我们就像编写程序一样编写项目构建脚本。 本文将从无到有创建一个用 Gradle
    的头像 发表于 09-25 14:46 2853次阅读
    <b class='flag-5'>Gradle</b>构建的多模块Spring Boot项目

    gradle安装与配置unity

    ://gradle.org/install/)并下载适用于你的操作系统的最新版本Gradle。根据你的操作系统,选择相应的发行版并根据指示进行
    的头像 发表于 12-07 14:48 2007次阅读

    Android Studio与Gradle深入

    ://jcenter.bintray.com/" }  下载不到特定的版本  Maven 和 Gradle 都会有一个缓存库,默认安装的情况下,是在用户根目录下的 .m2 或者 .gradle 文件夹
    发表于 08-31 17:58

    Gradle for Android

    Gradle for Android
    发表于 07-16 15:50

    HarmonyOS初步探索04:使用DevEco Studio时设置Gradle仓库代替

    /huawei-gradlebuild/”} } 依赖项{ // gradle-intellij-plugin用于构建JetBrains插件//请确保始终升级到最新版本// http
    发表于 12-15 14:26

    DevEco报错不能顺利进入gradle8.0怎么解决?

    报错内容为:此版本中使用了已弃用的 Gradle 功能,使其与 Gradle 8.0 不兼容。翻译一下,大概有些人说这个中外使用了Gradle的特性,但它应该与
    发表于 04-21 11:15

    谷歌 Android Studio 和 Gradle 插件使用全新版本编号

    在 Canary 通道已正式发布。在此版本,调整了 Android Studio 和 Gradle 插件的版本编号方案。此项变更将 Gradle
    的头像 发表于 12-11 10:49 1597次阅读

    gradle和gradlew的区别?

    你会注意到输出里打印了 Gradle版本,它对应着你运行的 gradle 命令在设备Gradle 安装包
    的头像 发表于 12-13 09:57 1583次阅读

    Gradle入门知识之Gradle详解

    大家回想一下自己第一次接触`Gradle`是什么时候? 相信大家也都是和我一样,在我们打开第一个AS项目的时候, 发现有很多带gradle字样的文件:`setting.gradle, build.
    的头像 发表于 03-30 10:47 2492次阅读
    <b class='flag-5'>Gradle</b>入门知识之<b class='flag-5'>Gradle</b>详解

    Gradle入门知识之Gradle详解(下)

    大家回想一下自己第一次接触`Gradle`是什么时候? 相信大家也都是和我一样,在我们打开第一个AS项目的时候, 发现有很多带gradle字样的文件:`setting.gradle, build.
    的头像 发表于 03-30 10:51 825次阅读
    <b class='flag-5'>Gradle</b>入门知识之<b class='flag-5'>Gradle</b>详解(下)

    Gradle入门知识之Gradle语法1

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 976次阅读
    <b class='flag-5'>Gradle</b>入门知识之<b class='flag-5'>Gradle</b>语法1

    Gradle入门知识之Gradle语法2

    很多开发喜欢把`Gradle`简单定义为一种构建工具,和`ant,maven`等作用类似, 诚然Gradle确实是用来做构建,但是如果简单得把Gradle拿来做构建,就太小看Gradle
    的头像 发表于 03-30 10:54 713次阅读

    Gradle Plugin和AGP的区别1

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这
    的头像 发表于 03-30 11:48 1190次阅读
    <b class='flag-5'>Gradle</b> Plugin和AGP的区别1

    Gradle Plugin和AGP的区别3

    Gradle Plugin`和`AGP`的区别? `Gradle Plugin`是`Gradle`构建过程中使用的插件的总称,而`Android Gradle Plugin`是这
    的头像 发表于 03-30 11:50 1225次阅读