原文标题:Building Java Applications
原文链接:https://guides.gradle.org/building-java-applications/
分类:Gradle Guides
翻译:机器翻译 + 人工调整
目录
内容:使用 Gradle 的 Build Init 插件以标准形式创建 Java 应用程序
一、需求
- 大约 8 分钟
- 文本编辑器
- 命令提示符程序
- Java Development Kit (JDK),版本 1.7+
- 最近版本的 Gradle
二、查看用户手册
Gradle 附带了一个名为 Build Init 的内置插件。它在 Gradle用户手册 中有记录。
该插件有一个名为init的任务,用于生成项目。
init 任务调用(也是内置的)wrapper 任务来创建 Gradle 包装器脚本gradlew。
要运行init任务,请从命令提示符运行以下命令:
$ gradle init --type <name>
name是以下之一:
- java-application
- java-library
- scala-library
- groovy-library
- basic
本指南使用 java-application 类型。
步骤一:
- 为新项目创建一个文件夹;
- 并将目录更改为该文件夹。
$ mkdir java-demo
$ cd java-demo
三、运行 init 任务
步骤一:
- 从新项目目录中,使用 java-application 参数运行 init 任务。
$ gradle init --type java-application
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :wrapper
> Task :init
BUILD SUCCESSFUL
init 任务首先运行 wrapper 任务,生成 gradlew 和 gradlew.bat 包装器脚本。
然后它使用以下结构创建新项目:
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── App.java
└── test
└── java
└── AppTest.java
gradle:生成包装文件的文件夹
src/main/java:默认Java源文件夹
src/test/test:默认Java测试文件夹
四、查看生成的项目文件
settings.gradle 文件有很多注释,但只有一个起作用的行:
rootProject.name='java-demo'
这会将根项目的名称分配给java-demo,这是默认设置。
生成的build.gradle文件也有很多注释。
此处重现活动部分(注意,在更高版本的Gradle中,依赖项的版本号可能会更新):
plugins {
id 'java'
id 'application'
}
repositories {
jcenter()
}
dependencies {
compile 'com.google.guava:guava:21.0'
testCompile 'junit:junit:4.12'
}
mainClassName = 'App'
代码说明(这里缺少序号标注):
- 公共Bintray Artifactory存储库
- 谷歌 Guava 库
- JUnit 测试库
- 具有“main”方法的类(由 application 插件使用)
构建文件添加了java和 application 插件。前者支持Java项目。
后者允许您指定一个具有 main 方法的类(可以通过在命令行执行 build 来调用该 main 方法)。
在这个 demo 中,包含 main 方法的类的名字是 App。
文件src / main / java / App.java如下所示:
public class App {
public String getGreeting() {
return "Hello world.";
}
public static void main(String[] args) {
System.out.println(new App().getGreeting());
}
}
main 方法由 application 插件的 “run” 任务调用
测试类src / test / java / AppTest.java 如下:
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 被认为是更好的形式。
$ ./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
第一次运行包装器脚本 gradlew 时,可能会有延迟。
这时命令在下载该 gradle 版本,并将其本地存储在〜/ .gradle / wrapper / dists文件夹中。
第一次运行构建时,Gradle 将检查您的〜/ .gradle目录下的缓存中是否已经有Guava和JUnit库。
如果没有,库将被下载并存储在那里。下次运行构建时,将使用缓存版本。
build 任务编译类,运行测试 并 生成测试报告。
可以通过打开位于 build / reports / tests / test / index.html 的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 ,执行 mainClassName属性指定的类中的 main 方法。
$ ./gradlew run
:compileJava UP-TO-DATE
:processResources NO-SOURCE
:classes UP-TO-DATE
:run
Hello world.
BUILD SUCCESSFUL
七、总结
您现在拥有了一个使用Gradle的build init插件生成的新Java项目。
在此过程中,您看到:
- 如何生成 Java 应用程序
- 生成的构建文件和示例 Java 文件是怎样构成的
- 如何运行 build 并查看测试报告
- 如何使用 application 插件中的 run 任务来执行 Java 应用程序