本指南演示了如何使用Gradle的Build Init插件创建遵循Gradle约定的新Java应用程序。
查看用户手册
Gradle带有一个称为Build Init插件的内置插件。在Gradle用户手册中有记录。该插件提供了一个名为的任务init
,可以生成项目。该插件还使用(也是内置的)wrapper
任务来创建Gradle包装器脚本gradlew
。
设定
第一步是为新项目创建一个文件夹,并将目录更改为该文件夹。
$ mkdir demo
$ cd demo
运行初始化任务
在新项目目录中,运行init
任务并java-application
在出现提示时选择项目类型。对于其他问题,请按Enter键以使用默认值。
$ gradle init
> Task :wrapper
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: Swift
Enter selection (default: Java) [1..5] 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):
> Task :init
Get more help with your project: https://docs.gradle.org/5.4.1/userguide/tutorial_java_projects.html
BUILD SUCCESSFUL
2 actionable tasks: 2 executed
如果您更喜欢Kotlin DSL,则可以选择kotlin
构建脚本DSL。
该init
任务wrapper
首先运行任务,然后生成gradlew
和gradlew.bat
包装脚本。然后,它使用以下结构创建新项目:
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ ├── java
│ │ └── demo
│ │ └── App.java
│ └── resources
└── test
├── java
│ └── demo
│ └── AppTest.java
└── resources
- 包装文件的生成文件夹
- 默认Java源文件夹
- 默认的Java测试文件夹
查看生成的项目文件
该settings.gradle
文件已被大量注释,但只有一个活动行:
rootProject.name = 'demo'
这会将根项目的名称设置为“ demo”,这将覆盖在目录所在目录后命名项目的默认行为。
生成的build.gradle
文件也有很多注释。活动部分在此处复制(请注意依赖项的版本号可能会在Gradle的更高版本中更新):
plugins {
id 'java'
id 'application'
}
repositories {
jcenter()
}
dependencies {
implementation 'com.google.guava:guava:26.0-jre'
testImplementation 'junit:junit:4.12'
}
mainClassName = 'demo.App'
- 公共Bintray人工仓库
- Google Guava库
- JUnit测试库
- 具有“ main”方法的类(由应用程序插件使用)
构建文件会添加java
和application
插件。前者支持Java项目。后者使您可以将一个类指定为具有一种main
方法,该方法可以由构建从命令行执行。在演示中,main
该类的名称为App
。
文件src/main/java/demo/App.java
显示在这里:
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/AppTest.java
如下所示:
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 @Test
批注的测试。该测试实例化App
该类,调用该getGreeting
方法,并检查返回的值是否不为null。
执行构建
要生成项目,请运行build
任务。您可以使用常规gradle
命令,但是当项目包含包装器脚本时,可以使用它来代替它。
$ ./gradlew build
> Task :compileJava
> Task :processResources NO-SOURCE
> Task :classes
> Task :jar
> Task :startScripts
> Task :distTar
> Task :distZip
> Task :assemble
> Task :compileTestJava
> Task :processTestResources NO-SOURCE
> Task :testClasses
> Task :test
> Task :check
> Task :build
BUILD SUCCESSFUL
7 actionable tasks: 7 executed
首次运行包装程序脚本时,gradlew 该版本的版本gradle 下载并本地存储在您的~/.gradle/wrapper/dists 文件夹中可能会有延迟。 |
第一次运行构建时,Gradle将检查~/.gradle
目录中缓存中是否已经具有Guava和JUnit库。如果没有,这些库将被下载并存储在那里。下次运行构建时,将使用缓存的版本。该build
任务将编译类,运行测试并生成测试报告。
您可以通过打开位于的HTML输出文件来查看测试报告build/reports/tests/test/index.html
。
示例报告如下所示:

运行应用程序
因为Gradle构建使用了Application插件,所以您可以从命令行运行该应用程序。首先,使用tasks
任务查看插件已添加的任务。
$ ./gradlew tasks
:tasks
------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------
Application tasks
-----------------
run - Runs this project as a JVM application
// ... many other tasks ...
该run
任务告诉Gradle main
在分配给该mainClassName
属性的类中执行该方法。
$ ./gradlew run
> Task :compileJava UP-TO-DATE
> Task :processResources NO-SOURCE
> Task :classes UP-TO-DATE
> Task :run
Hello world.
BUILD SUCCESSFUL
2 actionable tasks: 1 executed, 1 up-to-date
现在,您有了一个使用Gradle的build init插件生成的新Java项目。在此过程中,您看到了:
-
如何生成Java应用程序
-
生成的构建文件和示例Java文件的结构
-
如何运行构建并查看测试报告
-
如何使用
run
Application插件中的任务执行Java应用程序
帮助完善本指南
有意见或问题吗?找到错字了?像所有Gradle指南一样,帮助只是GitHub问题而已。请向gradle / guides 添加问题或请求请求,我们会尽快回复您。