构建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任务,这个任务会生成gradlewgradlew.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插件使用)

构建文件添加了javaapplication插件。这种形式支持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任务,这个任务会生成gradlewgradlew.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插件使用)

构建文件添加了javaapplication插件。这种形式支持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应用

results matching ""

    No results matching ""