本指南将引导您逐步使用Gradle构建一个简单的Java项目。
你会建立什么
您将创建一个简单的应用程序,然后使用Gradle进行构建。
你需要什么
-
约15分钟
-
最喜欢的文本编辑器或IDE
-
JDK 6或更高版本
如何完成本指南
设置项目
首先,您设置了一个Java项目供Gradle构建。为了将重点放在Gradle上,现在使该项目尽可能简单。
创建目录结构
在您选择的项目目录中,创建以下子目录结构;例如,mkdir -p src/main/java/hello
在* nix系统上:
└──src main──主要 └──java └──你好
在src/main/java/hello
目录中,您可以创建所需的任何Java类。为了简单起见并与本指南的其余部分保持一致,Spring建议您创建两个类: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- version -all.zip来获取源代码和文档以及二进制文件。)
将文件解压缩到您的计算机,然后将bin文件夹添加到您的路径。
要测试Gradle的安装,请从命令行运行Gradle:
摇动
如果一切顺利,您会看到一条欢迎消息:
:帮助 欢迎使用Gradle 6.0.1。 要运行构建,请运行gradle <task> ... 要查看可用任务列表,请运行gradle任务 要查看命令行选项列表,请运行gradle --help 要查看有关任务的更多详细信息,请运行gradle help --task <task> 有关故障排除,请访问https://help.gradle.org 在此版本中使用了不推荐使用的Gradle功能,使其与Gradle 7.0不兼容。 使用“ --warning-mode all”来显示各个弃用警告。 参见https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings 在455毫秒内成功建立 1个可执行的任务:1个已执行
您现在已经安装了Gradle。
找出Gradle可以做什么
现在已经安装了Gradle,看看它能做什么。在甚至为项目创建build.gradle文件之前,您都可以询问它有哪些可用的任务:
Gradle任务
您应该看到可用任务的列表。假设您在尚未具有build.gradle文件的文件夹中运行Gradle ,您将看到一些非常基本的任务,例如:
:任务 -------------------------------------------------- ---------- 可从根项目运行的任务 -------------------------------------------------- ---------- 构建设置任务 ----------------- init-初始化新的Gradle构建。 wrapper-生成Gradle包装器文件。 帮助任务 ---------- buildEnvironment-显示在根项目“ gs-gradle”中声明的所有构建脚本依赖项。 组件-显示由根项目“ gs-gradle”生成的组件。[孵化中] 依赖项-显示在根项目“ gs-gradle”中声明的所有依赖项。 DependencyInsight-显示对根项目“ gs-gradle”中特定依赖项的了解。 dependentComponents-显示根项目“ gs-gradle”中组件的从属组件。[孵化中] help-显示帮助信息。 模型-显示根项目“ gs-gradle”的配置模型。[孵化中] outwardVariants-显示根项目“ gs-gradle”的传出变体。 projects-显示根项目“ gs-gradle”的子项目。 properties-显示根项目“ gs-gradle”的属性。 任务-显示可从根项目“ gs-gradle”运行的任务。 要查看所有任务和更多详细信息,请运行gradle任务--all 要查看有关任务的更多详细信息,请运行gradle help --task <task> 在此版本中使用了不推荐使用的Gradle功能,使其与Gradle 7.0不兼容。 使用“ --warning-mode all”来显示各个弃用警告。 参见https://docs.gradle.org/6.0.1/userguide/command_line_interface.html#sec:command_line_warnings 在477毫秒内成功建立 1个可执行的任务:1个已执行
即使这些任务可用,但如果没有项目构建配置,它们也不会提供太多价值。当您充实build.gradle
文件时,一些任务会更有用。当您向中添加插件时build.gradle
,任务列表将不断增加,因此您偶尔会希望再次运行任务以查看可用的任务。
说到添加插件,接下来您将添加一个启用基本Java构建功能的插件。
建立Java程式码
从简单build.gradle
开始,在本指南开头创建的<项目文件夹>中创建一个非常基本的文件。只给它一行:
apply plugin: 'java'
构建配置中的这一行带来了巨大的力量。再次运行gradle任务,您会看到新任务已添加到列表中,包括用于构建项目,创建JavaDoc和运行测试的任务。
您将经常使用gradle构建任务。该任务将代码编译,测试并将其组装到一个JAR文件中。您可以这样运行它:
Gradle构建
几秒钟后,“ BUILD SUCCESSFUL”表明构建已完成。
要查看构建工作的结果,请查看构建文件夹。在其中,您将找到几个目录,包括以下三个著名的文件夹:
-
类。项目的已编译.class文件。
-
报告。构建生成的报告(例如测试报告)。
-
库。组装的项目库(通常是JAR和/或WAR文件)。
classes文件夹包含.class文件,这些文件是通过编译Java代码生成的。具体来说,您应该找到HelloWorld.class和Greeter.class。
此时,该项目没有任何库依赖关系,因此dependency_cache文件夹中没有任何内容。
reports文件夹应包含项目上正在运行的单元测试的报告。由于该项目尚无任何单元测试,因此该报告将变得毫无意义。
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());
}
}
这里HelloWorld
使用Joda Time的LocalTime
类来获取并打印当前时间。
如果您gradle build
现在运行以构建项目,则构建将失败,因为您尚未在构建中将Joda Time声明为编译依赖项。
对于初学者,您需要添加第三方库的源。
repositories {
mavenCentral()
}
该repositories
块指示该构建应从Maven Central存储库中解决其依赖关系。Gradle在很大程度上依赖于Maven构建工具建立的许多约定和功能,包括使用Maven Central作为库依赖源的选项。
现在我们已经准备好第三方库了,让我们声明一下。
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
implementation "joda-time:joda-time:2.2"
testImplementation "junit:junit:4.12"
}
使用该dependencies
块,您可以声明Joda Time的单个依赖关系。具体来说,您要在joda-time组中要求(从右到左阅读)joda-time库的2.2版。
关于此依赖关系的另一件事要注意,它是一个compile
依赖关系,表明它在编译时应该可用(并且如果您正在构建WAR文件,则包含在WAR的/ WEB-INF / libs文件夹中)。其他值得注意的依赖类型包括:
-
implementation
。编译项目代码所需的依赖关系,但将在运行时由运行代码的容器(例如Java Servlet API)提供。 -
testImplementation
。用于编译和运行测试的依赖关系,但对于构建或运行项目的运行时代码不是必需的。
最后,让我们为我们的JAR工件指定名称。
jar {
archiveBaseName = 'gs-gradle'
archiveVersion = '0.1.0'
}
该jar
块指定如何命名JAR文件。在这种情况下,它将渲染gs-gradle-0.1.0.jar
。
现在,如果您运行gradle build
,Gradle应该从Maven Central存储库中解决Joda Time依赖关系,并且构建将成功。
使用Gradle Wrapper建立您的专案
Gradle包装器是开始Gradle构建的首选方法。它由Windows的批处理脚本以及OS X和Linux的Shell脚本组成。这些脚本使您可以运行Gradle构建,而无需在系统上安装Gradle。这曾经是添加到您的构建文件中的东西,但是已经被折叠到Gradle中,因此不再需要。相反,您只需使用以下命令。
$ gradle wrapper --gradle-version 6.0.1
该任务完成后,您会注意到一些新文件。这两个脚本位于文件夹的根目录中,而包装jar和属性文件已添加到新gradle/wrapper
文件夹中。
└──<项目文件夹> └──gradlew └──gradlew.bat └──摇篮 └──包装纸 └──gradle-wrapper.jar └──gradle-wrapper.properties
Gradle包装器现在可用于构建您的项目。将其添加到您的版本控制系统中,每个克隆您的项目的人都可以相同地构建它。它的使用方式与Gradle的安装版本完全相同。运行包装程序脚本以执行构建任务,就像之前一样:
./gradlew构建
第一次为指定版本的Gradle运行包装程序时,它将下载并缓存该版本的Gradle二进制文件。Gradle Wrapper文件旨在用于源代码控制,因此任何人都可以构建项目,而无需首先安装和配置特定版本的Gradle。
在这一阶段,您将构建代码。您可以在此处查看结果:
建造 ├──班级 │└──主要 │└──你好 │├──Greeter.class │└──HelloWorld.class ├──依赖缓存 ├──库 │└──gs-gradle-0.1.0.jar └──tmp └──罐子 └──MANIFEST.MF
包括的是两个预期类文件Greeter
和HelloWorld
,以及JAR文件。快速浏览:
$ jar tvf build / libs / gs-gradle-0.1.0.jar 0星期五五月30 16:02:32 CDT 2014 META-INF / 2014年5月25日星期五16:02:32 CDT META-INF / MANIFEST.MF 2014年5月30日星期五06:00:32 CDT您好/ 369星期五5月30日16:02:32 CDT 2014年hello / Greeter.class 988星期五5月30日16:02:32 CDT 2014年hello / HelloWorld.class
类文件捆绑在一起。需要注意的重要一点是,即使您将joda-time声明为依赖项,该库也不包含在此处。而且JAR文件也不可运行。
为了使此代码可运行,我们可以使用gradle的application
插件。将此添加到您的build.gradle
文件。
Apply插件:“ application” mainClassName ='hello.HelloWorld'
然后,您可以运行该应用程序!
$ ./gradlew运行 :compileJava更新 :processResources最新 :UPS-TO-DATE :跑步 当前当地时间是:16:16:20.544 你好,世界! 建立成功 总时间:3.798秒
捆绑依赖项需要更多的思考。例如,如果我们正在构建WAR文件(一种通常与打包第三方依赖相关的格式),则可以使用gradle的WAR插件。如果您使用的是Spring Boot,并且想要一个可运行的JAR文件,则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项目。
也可以看看
以下指南也可能会有所帮助:
是否要编写新指南或为现有指南做出贡献?查看我们的贡献准则。
所有指南均以代码的ASLv2许可证和写作的Attribution,NoDerivatives创用CC许可证发布。 |