Gradle构建Java应用程序
1. 概述
本教程提供了有关如何使用 Gradle 构建基于 Java 的项目的实用指南。
我们将解释手动创建项目结构、执行初始配置以及添加 Java 插件和 JUnit 依赖项的步骤。然后,我们将构建并运行应用程序。
最后,在最后一节中,我们将举例说明如何使用 Gradle Build Init 插件执行此操作。一些基本的介绍也可以在Gradle 简介 一文中找到。
2.Java项目结构
在我们手动创建 Java 项目并准备构建之前,我们需要安装 Gradle 。
让我们开始使用名为gradle-employee-app的 PowerShell 控制台创建一个项目文件夹:
> mkdir gradle-employee-app
之后,让我们导航到项目文件夹并创建子文件夹:
> mkdir src/main/java/employee
结果输出如下所示:
Directory: D:\gradle-employee-app\src\main\java
## Mode LastWriteTime Length Name
d----- 4/10/2020 12:14 PM employee
在上面的项目结构中,让我们创建两个类。一个是简单的Employee类,其中包含姓名、电子邮件地址和出生年份等数据:
public class Employee {
String name;
String emailAddress;
int yearOfBirth;
}
第二个是打印Employee数据的主要EmployeeApp类:
public class EmployeeApp {
public static void main(String[] args){
Employee employee = new Employee();
employee.name = "John";
employee.emailAddress = "john@example.com";
employee.yearOfBirth = 1978;
System.out.println("Name: " + employee.name);
System.out.println("Email Address: " + employee.emailAddress);
System.out.println("Year Of Birth:" + employee.yearOfBirth);
}
}
3. 构建 Java 项目
接下来,为了构建我们的 Java 项目,我们在项目根文件夹中创建一个build.gradle配置文件。
以下是 PowerShell 命令行中的内容:
Echo > build.gradle
我们跳过与输入参数相关的下一步:
cmdlet Write-Output at command pipeline position 1
Supply values for the following parameters:
InputObject[0]:
为了构建成功,我们需要添加 Application Plugin :
plugins {
id 'application'
}
然后,我们应用应用程序插件并添加主类的完全限定名称:
apply plugin: 'application'
mainClassName = 'employee.EmployeeApp'
每个项目都由task组成。任务代表构建执行的一项工作,例如编译源代码。
例如,我们可以在配置文件中添加一个任务,打印关于已完成项目配置的消息:
println 'This is executed during configuration phase'
task configured {
println 'The project is configured'
}
通常,gradle build是主要任务,也是最常用的任务。此任务编译、测试并将代码组装成 JAR 文件。通过键入以下内容开始构建:
> gradle build
执行上面的命令输出:
> Configure project :
This is executed during configuration phase
The project is configured
BUILD SUCCESSFUL in 1s
2 actionable tasks: 2 up-to-date
要查看构建结果,让我们查看包含子文件夹的构建文件夹:classes、distributions、libs 和 reports。键入Tree / F给出构建文件夹的结构:
├───build
│ ├───classes
│ │ └───java
│ │ ├───main
│ │ │ └───employee
│ │ │ Employee.class
│ │ │ EmployeeApp.class
│ │ │
│ │ └───test
│ │ └───employee
│ │ EmployeeAppTest.class
│ │
│ ├───distributions
│ │ gradle-employee-app.tar
│ │ gradle-employee-app.zip
│ ├───libs
│ │ gradle-employee-app.jar
│ │
│ ├───reports
│ │ └───tests
│ │ └───test
│ │ │ index.html
│ │ │
│ │ ├───classes
│ │ │ employee.EmployeeAppTest.html
如您所见,classes子文件夹包含我们之前创建的两个已编译的*.class文件。distributions子文件夹包含应用程序 jar 包的存档版本。而libs*保存了我们应用程序的 jar 文件。
通常,在reports中,运行JUnit测试时会生成一些文件。
现在一切准备就绪,可以通过键入gradle run 来运行 Java 项目。退出时执行应用程序的结果:
> Configure project :
This is executed during configuration phase
The project is configured
> Task :run
Name: John
Email Address: john@example.com
Year Of Birth:1978
BUILD SUCCESSFUL in 1s
2 actionable tasks: 1 executed, 1 up-to-date
3.1.使用 Gradle Wrapper 构建
Gradle Wrapper 是一个调用已声明版本的 Gradle 的脚本。
首先,让我们在build.gradle文件中定义一个包装器任务:
task wrapper(type: Wrapper){
gradleVersion = '5.3.1'
}
让我们使用Power Shell中的gradle wrapper运行此任务:
> Configure project :
This is executed during configuration phase
The project is configured
BUILD SUCCESSFUL in 1s
1 actionable task: 1 executed
项目文件夹下将创建几个文件,包括*/gradle/wrapper*位置下的文件:
│ gradlew
│ gradlew.bat
│
├───gradle
│ └───wrapper
│ gradle-wrapper.jar
│ gradle-wrapper.properties
- gradlew:用于在 Linux 上创建 Gradle 任务的 shell 脚本
- gradlew.bat:Windows 用户创建 Gradle 任务的*.bat*脚本
- gradle-wrapper.jar:我们应用程序的包装器可执行 jar
- gradle-wrapper.properties:用于配置包装器的属性文件
4. 添加Java依赖并运行一个简单的测试
首先,在我们的配置文件中,我们需要设置一个远程存储库,从中下载依赖 jar。大多数情况下,这些存储库是mavenCentral()或jcenter()。我们选择第二个:
repositories {
jcenter()
}
创建存储库后,我们可以指定要下载的依赖项。在此示例中,我们添加了 Apache Commons 和 JUnit 库。要实现,请在依赖项配置中添加testImplementation和testRuntime部分。
它建立在一个额外的测试块上:
dependencies {
compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.12.0'
testImplementation('junit:junit:4.13')
testRuntime('junit:junit:4.13')
}
test {
useJUnit()
}
完成后,让我们在一个简单的测试中尝试 JUnit 的工作。导航到src文件夹并为测试创建子文件夹:
src> mkdir test/java/employee
在最后一个子文件夹中,让我们创建EmployeeAppTest.java:
public class EmployeeAppTest {
@Test
public void testData() {
Employee testEmp = this.getEmployeeTest();
assertEquals(testEmp.name, "John");
assertEquals(testEmp.emailAddress, "john@example.com");
assertEquals(testEmp.yearOfBirth, 1978);
}
private Employee getEmployeeTest() {
Employee employee = new Employee();
employee.name = "John";
employee.emailAddress = "john@example.com";
employee.yearOfBirth = 1978;
return employee;
}
}
与之前类似,让我们从命令行运行gradle clean 测试,测试应该没有问题地通过。
5. 使用 Gradle 初始化 Java 项目
在本节中,我们将解释创建和构建到目前为止我们已经完成的 Java 应用程序的步骤。不同的是,这一次,我们在 Gradle Build Init 插件的帮助下工作。
创建一个新的项目文件夹并将其命名为gradle-java-example。然后,切换到那个空的项目文件夹并运行初始化脚本:
> gradle init
Gradle 会问我们几个问题,并提供创建项目的选项。第一个问题是我们要生成什么类型的项目:
Select type of project to generate:
1: basic
2: cpp-application
3: cpp-library
4: groovy-application
5: groovy-library
6: java-application
7: java-library
8: kotlin-application
9: kotlin-library
10: scala-library
Select build script DSL:
1: groovy
2: kotlin
Enter selection [1..10] 6
为项目类型选择选项 6,然后为构建脚本选择第一个选项 (groovy)。
接下来,出现一个问题列表:
Select test framework:
1: junit
2: testng
3: spock
Enter selection (default: junit) [1..3] 1
Project name (default: gradle-java-example):
Source package (default: gradle.java.example): employee
BUILD SUCCESSFUL in 57m 45s
2 actionable tasks: 2 executed
在这里,我们为测试框架选择第一个选项 junit。为我们的项目选择默认名称并输入“employee”作为源包的名称。
要查看*/src项目文件夹中的完整目录结构,让我们在 Power Shell 中键入Tree /F* :
├───main
│ ├───java
│ │ └───employee
│ │ App.java
│ │
│ └───resources
└───test
├───java
│ └───employee
│ AppTest.java
│
└───resources
最后,如果我们使用gradle run 构建项目,我们会在退出时得到*“Hello World”* :
> Task :run
Hello world.
BUILD SUCCESSFUL in 1s
2 actionable tasks: 1 executed, 1 up-to-date