基于gradle构建Java应用程序

基于gradle构建java应用程序示例

目录

你需要什么

  • 大约8分钟
  • 一个文本编辑器
  • 命令行终端
  • jdk1.7或更高版本
  • 最近版本的gradle

用户手册

gradle带有内置的init插件。它的文档地址
https://docs.gradle.org/current/userguide/build_init_plugin.html.
这插件有个init task,可以生成项目. init task使用内置的wrapper task生成wrapper脚本gradlew

运行init task语法

gradle init --type <name>

参数name可选值

  • java-application
  • java-library
  • scala-library
  • groovy-library
  • basic

这里选择java-application类型

首先创建项目目录

$ mkdir java-demo
$ cd java-demo

初始化项目

在项目目录中运行init task,并使用参数java-application

$ gradle init --type java-application
Starting a Gradle Daemon (subsequent builds will be faster)
> Task :wrapper
> Task :init

BUILD SUCCESSFUL

init task先运行wrapper task生成gradlew、gradlew.bat脚本,并生成如下项目结构

├── build.gradle
├── gradle            #wrapper的文件
│   └── wrapper
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
    ├── main
    │   └── java        #源文件
    │       └── App.java
    └── test            #测试
        └── java
            └── AppTest.java

项目结构

settings.gradle有很多注释,有效行只有一行
settings.gradle

rootProject.name='java-demo'

配置root project的名称java-demo

生成的build.gradle同样有很多注释,下面是有效部分
build.gradle

apply plugin: 'java'
apply plugin: 'application'

repositories {
    jcenter()      #公有仓库
}

dependencies {
    compile 'com.google.guava:guava:21.0'   #google的guava包
    testCompile 'junit:junit:4.12'          #junit测试包
}

mainClassName = 'App'    #main类

build文件中加了java和application两个插件。前者支持java项目,后者允许指定包含main方法的类,在run时执行

src/main/App.java

public class App {
    public String getGreeting() {
        return "Hello world.";
    }

    public static void main(String[] args) {   #在运行application插件的run task时调用
        System.out.println(new App().getGreeting());
    }
}

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());
    }
}

编译程序

编译项目使用build命令。可以使用常用的gradle命令,但是使用wrapper脚本更好

$ ./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

注意:第一次运行时会比较慢

第一次运行build时,会检查.gradle目录是否存在guava、junit包。如果不存在,则下载并存到本地目录
下次运行build就使用缓存。build task编译class文件,运行test用例,生成测试报告

查看html报告build/reports/tests/test/index.html.
样例
这里写图片描述

运行程序

gradle构建使用了application插件,所以能在命令行运行程序。
看看有哪些task

$ ./gradlew tasks
:tasks

------------------------------------------------------------
All tasks runnable from root project
------------------------------------------------------------

Application tasks
-----------------
run - Runs this project as a JVM application

// ... many other tasks ...

run task会让gradle读取mainClassName属性指定的类,执行main方法

$ ./gradlew run
:compileJava UP-TO-DATE
:processResources NO-SOURCE
:classes UP-TO-DATE
:run
Hello world.

BUILD SUCCESSFUL

总结

通过上面可以学到

  • 如何生成java应用程序
  • 如何生成build文件、java文件
  • 如何运行构建、查看测试报告
  • 如何使用application插件的run task执行程序

源码

github地址
https://github.com/gradle-guides/building-java-applications/

参考资料
https://guides.gradle.org/building-java-applications

《了凡四训》详解之改过之法
https://v.youku.com/v_show/id_XMzY5NTcxMDIwOA
印光大师十念法(胡小林主讲第1集)
http://v.youku.com/v_show/id_XMzUwMzc4NzY4NA

posted @ 2018-06-30 23:16 妙音 阅读(...) 评论(...) 编辑 收藏