首页 > 编程语言 >使用 Gradle 构建 Java 项目

使用 Gradle 构建 Java 项目

时间:2022-12-21 16:00:17浏览次数:41  
标签:文件 Java gradle 构建 build gs Gradle

使用 Gradle 构建 Java 项目_Gradle

本指南将引导您使用 Gradle 构建一个简单的 Java 项目。

您将构建的内容

您将创建一个简单的应用程序,然后使用 Gradle 构建它。

你需要什么

  • 约15分钟
  • 最喜欢的文本编辑器或 IDE
  • JDK 6或以后

如何完成本指南

像大多数春天一样入门指南,您可以从头开始并完成每个步骤,也可以绕过您已经熟悉的基本设置步骤。无论哪种方式,您最终都会得到工作代码。

要从头开始,请继续设置项目.

要跳过基础知识,请执行以下操作:

  • 下载​并解压缩本指南的源存储库,或使用吉特:git clone https://github.com/spring-guides/gs-gradle.git
  • 光盘成gs-gradle/initial
  • 跳转到安装 Gradle.

完成后,您可以根据 中的代码检查结果。​​gs-gradle/complete​

设置项目

首先,你设置一个 Java 项目供 Gradle 构建。为了将重点放在 Gradle 上,请暂时使项目尽可能简单。

创建目录结构

在您选择的项目目录中,创建以下子目录结构;例如,在 *nix 系统上:​​mkdir -p src/main/java/hello​

└── src
└── main
└── java
└── hello

在该目录中,您可以创建所需的任何 Java 类。为了简单起见,并且为了与本指南的其余部分保持一致,Spring 建议您创建两个类:和 。​​src/main/java/hello​​​​HelloWorld.java​​​​Greeter.java​

​src/main/java/hello/HelloWorld.java​

package hello;

public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

​src/main/java/hello/Greeter.java​

package hello;

public class Greeter {
public String sayHello() {
return "Hello world!";
}
}

安装 Gradle

现在您已经有了可以使用 Gradle 构建的项目,可以安装 Gradle。

强烈建议使用安装程序:

  • 开发人
  • 自制(酿造安装格拉德尔)

作为最后的手段,如果这些工具都不适合您的需求,您可以从以下位置下载二进制文件https://www.gradle.org/downloads.只有二进制文件是必需的,因此请查找指向 gradle-version-bin.zip 的链接。(您也可以选择 gradle 版本全部.zip以获取源代码和文档以及二进制文件。

将文件解压缩到计算机,然后将 bin 文件夹添加到路径中。

要测试 Gradle 安装,请从命令行运行 Gradle:

gradle

如果一切顺利,您会看到一条欢迎消息:

:help

Welcome to Gradle 6.0.1.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

To see more detail about a task, run gradle help --task <task>

For troubleshooting, visit https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 455ms
1 actionable task: 1 executed

您现在已安装 Gradle。

了解 Gradle 可以做什么

现在 Gradle 已安装,看看它能做什么。在为项目创建build.gradle文件之前,您可以询问它有哪些任务可用:

gradle tasks

您应该会看到可用任务的列表。假设您在没有build.gradle文件的文件夹中运行Gradle,您将看到一些非常基本的任务,例如:

:tasks

------------------------------------------------------------
Tasks runnable from root project
------------------------------------------------------------

Build Setup tasks
-----------------
init - Initializes a new Gradle build.
wrapper - Generates Gradle wrapper files.

Help tasks
----------
buildEnvironment - Displays all buildscript dependencies declared in root project 'gs-gradle'.
components - Displays the components produced by root project 'gs-gradle'. [incubating]
dependencies - Displays all dependencies declared in root project 'gs-gradle'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gs-gradle'.
dependentComponents - Displays the dependent components of components in root project 'gs-gradle'. [incubating]
help - Displays a help message.
model - Displays the configuration model of root project 'gs-gradle'. [incubating]
outgoingVariants - Displays the outgoing variants of root project 'gs-gradle'.
projects - Displays the sub-projects of root project 'gs-gradle'.
properties - Displays the properties of root project 'gs-gradle'.
tasks - Displays the tasks runnable from root project 'gs-gradle'.

To see all tasks and more detail, run gradle tasks --all

To see more detail about a task, run gradle help --task <task>

Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings

BUILD SUCCESSFUL in 477ms
1 actionable task: 1 executed

即使这些任务可用,如果没有项目生成配置,它们也不会提供太多价值。当您充实文件时,某些任务将更有用。任务列表将随着您向 添加插件而增长,因此您偶尔需要再次运行任务以查看哪些任务可用。​​build.gradle​​​​build.gradle​

说到添加插件,接下来你添加一个支持基本 Java 构建功能的插件。

构建 Java 代码

从简单开始,在本指南开头创建的<项目文件夹>中创建一个非常基本的文件。只给它一行:​​build.gradle​

apply plugin: 'java'

构建配置中的这条线路带来了大量的功率。再次运行 gradle 任务,您会看到添加到列表中的新任务,包括用于构建项目、创建 JavaDoc 和运行测试的任务。

您将经常使用 gradle 构建任务。此任务编译、测试代码并将其汇编到 JAR 文件中。你可以像这样运行它:

gradle build

几秒钟后,“构建成功”表示构建已完成。

若要查看生成工作的结果,请查看生成文件夹。在其中,您将找到几个目录,包括以下三个值得注意的文件夹:

  • 。项目的已编译.class文件。
  • 报告。生成生成的报告(例如测试报告)。
  • 库。组装的项目库(通常是JAR和/或WAR文件)。

类文件夹包含编译 Java 代码生成的.class文件。具体来说,你应该找到HelloWorld.class和Greeter.class。

此时,项目没有任何库依赖项,因此dependency_cache文件夹中没有任何内容。

报表文件夹应包含对项目运行单元测试的报告。由于该项目尚没有任何单元测试,因此该报告将无趣。

libs 文件夹应包含一个以项目文件夹命名的 JAR 文件。再往下看,您将看到如何指定 JAR 的名称及其版本。

声明依赖项

简单的 Hello World 示例是完全独立的,不依赖于任何其他库。但是,大多数应用程序依赖于外部库来处理常见和/或复杂的功能。

例如,假设除了说“Hello World!”之外,还希望应用程序打印当前日期和时间。您可以使用本机 Java 库中的日期和时间工具,但您可以使用 Joda Time 库使事情变得更有趣。

首先,将 HelloWorld.java 更改为如下所示:

package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
public static void main(String[] args) {
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime);

Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

这里使用 Joda Time 的类来获取和打印当前时间。​​HelloWorld​​​​LocalTime​

如果现在运行以生成项目,则生成将失败,因为尚未在生成中将 Joda Time 声明为编译依赖项。​​gradle build​

首先,您需要为第三方库添加源。

repositories { 
mavenCentral()
}

该块指示构建应从 Maven Central 存储库解析其依赖项。Gradle 严重依赖 Maven 构建工具建立的许多约定和工具,包括使用 Maven Central 作为库依赖项源的选项。​​repositories​

现在我们已经为第三方库做好了准备,让我们声明一些。

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
implementation "joda-time:joda-time:2.2"
testImplementation "junit:junit:4.12"
}

使用该块,您可以声明 Joda Time 的单个依赖项。具体来说,您要求(从右到左阅读)joda-time 库中的 joda-time 库 2.2 版本。​​dependencies​

关于此依赖项需要注意的另一件事是它是一个依赖项,表明它应该在编译时可用(如果您正在构建 WAR 文件,则包含在 WAR 的 /WEB-INF/libs 文件夹中)。其他值得注意的依赖项类型包括:​​compile​

  • ​implementation​​.编译项目代码所需的依赖项,但这些依赖项将在运行时由运行代码的容器(例如,Java Servlet API)提供。
  • ​testImplementation​​.用于编译和运行测试的依赖项,但生成或运行项目的运行时代码不需要的依赖项。

最后,让我们指定 JAR 工件的名称。

jar {
archiveBaseName = 'gs-gradle'
archiveVersion = '0.1.0'
}

该块指定 JAR 文件的命名方式。在这种情况下,它将呈现 .​​jar​​​​gs-gradle-0.1.0.jar​

现在,如果您运行 ,Gradle 应该从 Maven Central 存储库中解析 Joda Time 依赖项,并且构建将成功。​​gradle build​

使用 Gradle 包装器构建您的项目

Gradle 包装器是启动 Gradle 构建的首选方式。它由Windows的批处理脚本和OS X和Linux的shell脚本组成。这些脚本允许您运行 Gradle 构建,而无需在系统上安装 Gradle。这曾经是添加到构建文件中的内容,但它已折叠到 Gradle 中,因此不再需要。相反,您只需使用以下命令。

$ gradle wrapper --gradle-version 6.0.1

此任务完成后,您会注意到一些新文件。这两个脚本位于文件夹的根目录中,而包装器 jar 和属性文件已添加到新文件夹中。​​gradle/wrapper​

└── <project folder>
└── gradlew
└── gradlew.bat
└── gradle
└── wrapper
└── gradle-wrapper.jar
└── gradle-wrapper.properties

Gradle 包装器现在可用于构建您的项目。将其添加到您的版本控制系统中,克隆您的项目的每个人都可以构建相同的项目。它的使用方式与已安装的 Gradle 版本完全相同。运行包装脚本以执行构建任务,就像您之前所做的那样:

./gradlew build

首次为指定版本的 Gradle 运行包装器时,它会下载并缓存该版本的 Gradle 二进制文件。Gradle 包装器文件旨在提交到源代码管理,以便任何人都可以构建项目,而无需先安装和配置特定版本的 Gradle。

在此阶段,您将构建代码。您可以在此处查看结果:

build
├── classes
│ └── main
│ └── hello
│ ├── Greeter.class
│ └── HelloWorld.class
├── dependency-cache
├── libs
│ └── gs-gradle-0.1.0.jar
└── tmp
└── jar
└── MANIFEST.MF

包括 和 的两个预期类文件以及一个 JAR 文件。快速浏览一下:​​Greeter​​​​HelloWorld​

$ jar tvf build/libs/gs-gradle-0.1.0.jar
0 Fri May 30 16:02:32 CDT 2014 META-INF/
25 Fri May 30 16:02:32 CDT 2014 META-INF/MANIFEST.MF
0 Fri May 30 16:02:32 CDT 2014 hello/
369 Fri May 30 16:02:32 CDT 2014 hello/Greeter.class
988 Fri May 30 16:02:32 CDT 2014 hello/HelloWorld.class

类文件已捆绑在一起。请务必注意,即使您将 joda-time 声明为依赖项,此处也不包含该库。而且 JAR 文件也无法运行。

为了使这段代码可运行,我们可以使用 gradle 的插件。将其添加到您的文件中。​​application​​​​build.gradle​

apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

然后,您可以运行该应用程序!

$ ./gradlew run
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
The current local time is: 16:16:20.544
Hello world!

BUILD SUCCESSFUL

Total time: 3.798 secs

To bundle up dependencies requires more thought. For example, if we were building a WAR file, a format commonly associated with packing in 3rd party dependencies, we could use gradle’s WAR plugin. If you are using Spring Boot and want a runnable JAR file, the spring-boot-gradle-plugin挺方便的。在这个阶段,gradle 对您的系统了解不够,无法做出选择。但就目前而言,这应该足以开始使用 gradle。

为了总结本指南的内容,以下是完整的文件:​​build.gradle​

​build.gradle​

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

// tag::repositories[]
repositories {
mavenCentral()
}
// end::repositories[]

// tag::jar[]
jar {
archiveBaseName = 'gs-gradle'
archiveVersion = '0.1.0'
}
// end::jar[]

// tag::dependencies[]
sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
implementation "joda-time:joda-time:2.2"
testImplementation "junit:junit:4.12"
}
// end::dependencies[]

// tag::wrapper[]
// end::wrapper[]

这里嵌入了许多开始/结束注释。这样就可以将构建文件的部分提取到本指南中,以获取上述详细说明。生产构建文件中不需要它们。

总结

祝贺!您现在已经创建了一个简单而有效的 Gradle 构建文件,用于构建 Java 项目。

标签:文件,Java,gradle,构建,build,gs,Gradle
From: https://blog.51cto.com/u_15326439/5959955

相关文章

  • PECS 原则在 Java 中的体现
    如果需要取值,应使用?extendsT作为数据结构泛型。如果需要写值,应使用?superT作为数据结构泛型。//java.util.Collections#copypublicstatic<T>voidcopy......
  • JavaScript中数组中的方法
    将数组转换成字符串JavaScript方法 toString() 把数组转换为数组值(逗号分隔)的字符串。实例: varfruits=["Banana","Orange","Apple","Mango"]; ......
  • Java-IDEA破解下载
    IntelliJIDEA下载 一、访问官网下载链接1、点击Download下载,然后等待下载完成  2、开始安装,点击下一步 3、选择要安装的位置,然后点击下一步,这里我选择的是......
  • java数据类型转换有哪几种?看这篇就够了!
    前言在上一篇文章中,壹哥给大家讲解了Java中的数据类型,从此大家就知道了基本类型和引用类型,尤其是8种基本类型的使用和各自特点。但实际上数据类型的使用还有很多更深入的......
  • 一篇文章彻底明白java中的重要概念——注解
    1.注解基本概念 注解,什么是注解? 打开百度搜索     好,看不懂没关系一步一步慢慢来先不管注解,注释这个概念应该就很熟悉了,文档注释,单行注释,多行注释......
  • Java实现发送邮件
    Java实现发送邮件摘要:在做Java开发、安卓开发、web开发时,经常遇到邮箱绑定、邮箱找回密码等功能,在使用绑定邮箱并依靠邮箱发送验证码时,需要利用Java实现发送邮件的功能。本......
  • java修剪字节组
    publicstaticStringbyteArrToString(byte[]data,Stringencoding)throwsUnsupportedEncodingException{intindex=-1;for(bytet:data......
  • Java实现多种语言编译运行
    Java实现多种语言编译运行摘要:在Java开发过程中,经常会遇到使用Java实现某一个功能比其他语言要复杂,因此通常将该功能使用其他编程语言来完成后,再通过Java调用编译程序编译运......
  • 基于Java springboot+mybatis+mysql实现的校园新闻系统
    @目录一、系统介绍二、功能展示1.主页2.登录以及注册3.普通用户对新闻咨询的编辑、发布和删除4.管理员对新闻的审核发布和撤销取消发布三、代码展示四、获取源码一、系统......
  • JavaScript
    1、什么是JavaScriptJavaScript是一门世界上最流行的脚本语言Java、JavaScript没有任何关系,当初为了热门,所以在Script前面加上Java~~10天~一个合格的程序员,必须要精通......