使用Gradle构建Java应用程序

本指南演示了如何使用Gradle的Build Init插件创建遵循Gradle约定的新Java应用程序。

你需要什么

  • 约9分钟

  • 文字编辑器

  • 命令提示符

  • 一个Java开发工具包(JDK)8或更高版本

  • 一个Gradle,版本5.2.1或更高

查看用户手册

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首先运行任务,然后生成gradlewgradlew.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文件已被大量注释,但只有一个活动行:

settings.gradle
rootProject.name = 'demo'

这会将根项目的名称设置为“ demo”,这将覆盖在目录所在目录后命名项目的默认行为。

生成的build.gradle文件也有很多注释。活动部分在此处复制(请注意依赖项的版本号可能会在Gradle的更高版本中更新):

build.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”方法的类(由应用程序插件使用) 

构建文件会添加javaapplication插件。前者支持Java项目。后者使您可以将一个类指定为具有一种main方法,该方法可以由构建从命令行执行。在演示中,main该类的名称为App

文件src/main/java/demo/App.java显示在这里:

src / main / java / 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如下所示:

src / test / java / 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文件的结构

  • 如何运行构建并查看测试报告

  • 如何使用runApplication插件中的任务执行Java应用程序

帮助完善本指南

有意见或问题吗?找到错字了?像所有Gradle指南一样,帮助只是GitHub问题而已。请向gradle / guides 添加问题或请求请求,我们会尽快回复您。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值