Gradle 命令行构建项目
[toc]
环境
- 一个文本编辑器或IDE,例如IntelliJ IDEA
- 一个Java开发工具包(JDK),版本8或更高-例如AdoptOpenJDK
- 最新的Gradle发行版
创建一个项目文件夹
Gradle自带一个名为init的内置任务,它会在一个空文件夹中初始化一个新的Gradle项目。init任务使用(也是内置的)wrapper任务来创建一个Gradle包装器脚本gradlew。
第一步是为新项目创建一个文件夹,并将目录更改到其中。
$ mkdir demo
$ cd demo
运行初始化任务
在新的项目目录中,使用以下命令在终端中运行init任务:当出现提示时,选择2:application project类型和3:Java作为实现语言。接下来,您可以选择用于编写构建脚本的DSL——1:Groovy或2:Kotlin。对于其他问题,请按“enter”,使用默认值。
输出如下所示:
$ gradle init
Select type of project to generate:
1: basic
2: application
3: library
4: Gradle plugin
Enter selection (default: basic) [1..4] 2
Select implementation language:
1: C++
2: Groovy
3: Java
4: Kotlin
5: Scala
6: Swift
Enter selection (default: Java) [1..6] 3
Select build script DSL:
1: Groovy
2: Kotlin
Enter selection (default: Groovy) [1..2] 1
Select test framework:
1: JUnit 4
2: TestNG
3: Spock
4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4]
Project name (default: demo):
Source package (default: demo):
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
init任务生成的新项目具有如下结构:
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── app
├── build.gradle
└── src
├── main
│ └── java
│ └── demo
│ └── App.java
└── test
└── java
└── demo
└── AppTest.java
- gradle 是为包装器文件生成的文件夹
- gradlew 和 gradlew.bat 是Gradle包装器启动脚本
- settings.gradle 是定义生成名称和子项目的设置文件
- build.gradle 是 app 项目的构建脚本
- main/java 是默认的 Java 源文件夹
- test/java 是默认 Java 测试源文件夹
现在,您已经完成了构建 Java 应用程序的项目设置。
检查项目文件
settings.gradle(.kts)文件有两个活动行:
rootProject.name = 'demo'
include('app')
- rootProject.name 为构建分配一个名称,这将覆盖以其所在目录命名构建的默认行为。建议设置一个固定的名称,因为如果项目是共享的,文件夹可能会改变——例如作为Git存储库的根目录。
- include(“app”)定义构建由一个名为app的子项目组成,该子项目包含实际的代码和构建逻辑。更多的子项目可以通过附加的include(…)语句来添加。
我们的构建包含一个名为app的子项目,它代表我们正在构建的Java应用程序。它在app/build.gradle(.kts)文件中配置:
plugins {
id 'application'
}
repositories {
jcenter()
}
dependencies {
testImplementation 'junit:junit:4.13'
implementation 'com.google.guava:guava:29.0-jre'
}
application {
mainClass = 'demo.App'
}
- id ‘application’ - 应用application插件来添加对用 Java 构建 CLI 应用程序的支持
- jcenter() - 使用 JCenter 来解析依赖项。
- testImplementation ‘junit:junit:4.13’ - 使用 JUnit 测试框架
- implementation ‘com.google.guava:guava:29.0-jre’ - 此依赖项由应用程序使用。
- mainClass = ‘demo.App’ - 定义应用程序的主类。
src/main/java/demo/App.java文件如下所示:
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package demo;
public class App {
public String getGreeting() {
return "Hello World!";
}
public static void main(String[] args) {
System.out.println(new App().getGreeting());
}
}
生成的测试src/test/java/demo/App.java如下所示:
/*
* This Java source file was generated by the Gradle 'init' task.
*/
package demo;
import org.junit.Test;
import static org.junit.Assert.*;
public class AppTest {
@Test public void testAppHasAGreeting() {
App classUnderTest = new App();
assertNotNull("app should have a greeting", classUnderTest.getGreeting());
}
}
生成的测试类只有一个JUnit 4测试。测试实例化App类,调用它的一个方法,并检查它是否返回预期的值。
运行应用程序
由于应用程序插件,您可以直接从命令行运行应用程序。run任务告诉Gradle在分配给mainClass属性的类中执行main方法。
$ ./gradlew run
> Task :app:run
Hello world!
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
第一次运行包装器脚本gradlew时,可能会有延迟,因为该版本的gradle被下载并存储在本地~/中。gradle /包装/ dist文件夹。
打包应用程序
应用程序插件还为您打包了应用程序及其所有依赖项。归档文件还将包含一个脚本,用一条命令启动应用程序。
$ ./gradlew build
BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed
如果你像上面所示的那样运行一个完整的构建,Gradle会为你生成两种格式的存档:app/build/ distributing /app.tar和app/build/ distributing /app.zip。
发布构建扫描
要更多地了解构建在幕后的工作,最好的方法是发布构建扫描。要做到这一点,只需运行带有——scan标志的Gradle。
$ ./gradlew build --scan
BUILD SUCCESSFUL in 0s
7 actionable tasks: 7 executed
Publishing a build scan to scans.gradle.com requires accepting the Gradle Terms of Service defined at https://gradle.com/terms-of-service.
Do you accept these terms? [yes, no] yes
Gradle Terms of Service accepted.
Publishing build scan...
https://gradle.com/s/5u4w3gxeurtd2
单击该链接,查看执行了哪些任务,下载了哪些依赖项,以及更多细节!