构建Java应用
此手册展示了怎样使用Gradle的初始化插件构建标准的Java应用
你需要的
- 大约8分钟时间
- 文本编辑器
- 一个命令行
- JDK 1.7 或更高
- 任何Gradle最近的发行版
检出用户手册
Gradle具有内置的插件叫做构建初始化插件(Build Init plugin)。在Gradle的用户手册有相应的文档https://docs.gradle.org/current/userguide/build_init_plugin.html
这个插件具有一个任务,被称为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
运行初始化任务
在新项目的目录里,以java-application
参数运行init
任务
$ gradle init --type java-application
Starting a Gradle Daemon (subsequent builds will be faster)
:wrapper
:init
BUILD SUCCESSFUL
init
任务首先运行wrapper
任务,这个任务会生成gradlew
和gradlew.bat
包裹脚本。然后以下
面的结构创建一个新项目:
├── build.gradle
├── gradle (1)
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java (2)
│ └── App.java
└── test
└── java (3)
└── AppTest.java
- 生成包裹文件的文件夹
- 默认的Java源文件
- 默认的Java测试文件
检查生成的项目文件
settings.gradle
文件被严重的注释了,但只有一行有效:
settings.gradle
rootProject.name = 'java-demo'
把根项目的名字赋值为java-demo
,这也是默认的配制。
生成的build.gradle
文件也具有许多注释。有效的部分被复制在这里(注意依赖的的版本数值可能在将来的Gradle版本里更新)
build.gradle
apply plugin: 'java'
apply plugin: 'application'
repositories {
jcenter() (1)
}
dependencies {
compile 'com.google.guava:guava:21.0' (2)
testCompile 'junit:junit:4.12' (3)
}
mainClassName = 'App' (4)
- 公共仓库
- Google Guava库
- Junit 测试库
- 具有"main"方法的类(被Application插件使用)
构建文件添加了java
和application
插件。这种形式支持Java项目。后者指定哪个类具有main
方法,你
可以在命令行上执行构建。在上面的例子里,具有main
方法的类是App
。
src/main/java/App.java
像下面这样展示:
src/main/java/App.java
public class App {
public String getGreeting() {
return "Hello world.";
}
public static void main(String[] args) { (1)
System.out.println(new App().getGreeting());
}
}
- 被Application插件"run"任务调用
测式类,src/text/java/AppTest.java
像下面这样展示:
src/text/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's标注的@Test
注解的测试方法。这个测试初始化App
类,调用getGreeting
方法,并检查返回的值不为null
。
执行构建
要构建项目,运行build
命令,你可以使用常规的gradle
命令,但是当一个项目包含了一个包裹
脚本时,使用其作替换是更好的形式。
$ ./gradlew build
:compileJava
:processResources NO-SOURCE
:classes
:jar
:startScripts
:distTar
:distZip
:assemble
:compileTestJava
:processTestResources NO-SOURCE
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
当你第一次运行包裹的脚本,
gradlew
,有可能有延时当下载gradle
并缓存到你本地的~/.gradle/wrapper/dists
文件夹。
第一次运行构建时,Gradle将会检查你是否在~/.gradle
目录里缓存了Guava和Junit库。如果
没有,将会下载并缓存到这个文件夹。当你下次运行构建时,缓存的版本被使用。build
任务编译
类,运行任务,并生成测试报告。
你可以观察测试报告打开出输出的HTML文件,在build/reports/tests/test/index.html
。
一份相同的报告像下面这样展示:
运行应用
因为Gralde构建使用了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内置插件构建生成的Java项目。在处理流程上,你学会了:
- 怎样生成一个Java应用
- 生成的构建文件和Java文件的结构是什么样的
- 怎样运行构建和查看测试报告
- 怎样从Application插件使用
run
任务来执行一个Java应用
构建Java应用
此向导展示了怎样使用Gradle的初始化插件构建标准的Java应用
你需要的
- 大约8分钟时间
- 文本编辑器
- 一个命令行
- JDK 1.7 或更高
- 任何Gradle最近的发行版
检出用户手册
Gradle具有内置的插件叫做构建初始化插件(Build Init plugin)。在Gradle的用户手册有相应的文档
https://docs.gradle.org/current/userguide/build_init_plugin.html
这个插件具有一个任务,被称为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
运行初始化任务
在新项目的目录里,以java-application
参数运行init
任务
$ gradle init --type java-application
Starting a Gradle Daemon (subsequent builds will be faster)
:wrapper
:init
BUILD SUCCESSFUL
init
任务首先运行wrapper
任务,这个任务会生成gradlew
和gradlew.bat
包裹脚本。然后以下
面的结构创建一个新项目:
├── build.gradle
├── gradle (1)
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java (2)
│ └── App.java
└── test
└── java (3)
└── AppTest.java
- 生成包裹文件的文件夹
- 默认的Java源文件
- 默认的Java测试文件
检查生成的项目文件
settings.gradle
文件被严重的注释了,但只有一行有效:
settings.gradle
rootProject.name = 'java-demo'
把根项目的名字赋值为java-demo
,这也是默认的配制。
生成的build.gradle
文件也具有许多注释。有效的部分被复制在这里(注意依赖的的版本数值可能在将来的Gradle版本里更新)
build.gradle
apply plugin: 'java'
apply plugin: 'application'
repositories {
jcenter() (1)
}
dependencies {
compile 'com.google.guava:guava:21.0' (2)
testCompile 'junit:junit:4.12' (3)
}
mainClassName = 'App' (4)
- 公共仓库
- Google Guava库
- Junit 测试库
- 具有"main"方法的类(被Application插件使用)
构建文件添加了java
和application
插件。这种形式支持Java项目。后者指定哪个类具有main
方法,你
可以在命令行上执行构建。在上面的例子里,具有main
方法的类是App
。
src/main/java/App.java
像下面这样展示:
src/main/java/App.java
public class App {
public String getGreeting() {
return "Hello world.";
}
public static void main(String[] args) { (1)
System.out.println(new App().getGreeting());
}
}
- 被Application插件"run"任务调用
测式类,src/text/java/AppTest.java
像下面这样展示:
src/text/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's标注的@Test
注解的测试方法。这个测试初始化App
类,调用getGreeting
方法,并检查返回的值不为null
。
执行构建
要构建项目,运行build
命令,你可以使用常规的gradle
命令,但是当一个项目包含了一个包裹
脚本时,使用其作替换是更好的形式。
$ ./gradlew build
:compileJava
:processResources NO-SOURCE
:classes
:jar
:startScripts
:distTar
:distZip
:assemble
:compileTestJava
:processTestResources NO-SOURCE
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
当你第一次运行包裹的脚本,
gradlew
,有可能有延时当下载gradle
并缓存到你本地的~/.gradle/wrapper/dists
文件夹。
第一次运行构建时,Gradle将会检查你是否在~/.gradle
目录里缓存了Guava和Junit库。如果
没有,将会下载并缓存到这个文件夹。当你下次运行构建时,缓存的版本被使用。build
任务编译
类,运行任务,并生成测试报告。
你可以观察测试报告打开出输出的HTML文件,在build/reports/tests/test/index.html
。
一份相同的报告像下面这样展示:
运行应用
因为Gralde构建使用了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内置插件构建生成的Java项目。在处理流程上,你学会了:
- 怎样生成一个Java应用
- 生成的构建文件和Java文件的结构是什么样的
- 怎样运行构建和查看测试报告
- 怎样从Application插件使用
run
任务来执行一个Java应用