使用 Gradle 构建 Java 项目

这个手册将通过一个简单的 Java 项目向大家介绍如何使用 Gradle 构建 Java 项目。

我们将要做什么?

我们将在这篇文档航中创建一个简单的 Java 项目,然后使用 Gradle 构建它。

需要准备什么?

  • 预留15分钟空闲时间
  • 一件称手的兵器(你最喜欢的 IDE 或者文本编辑器)
  • Java环境([JDK6](http://www.oracle.com/technetwork/java/javase/downloads/index.html”JDK”及以上版本)

如何完成这个手册的内容?

与大多数 Spring 的入门手册一样,你可以从头开始一步步完成教程中的每一步工作,也可以跳过你已经烂熟的基础步骤。不管采用那种方式,你最后都会得到可工作的代码。

  1. 如果要重头开始,猛戳这里
  2. 如果要跳过基础部分,需执行以下操作:
    • 下载并解压本文档相关源代码,或者使用Git克隆一个:git clone https://github.com/spring-guides/gs-gradle.git
    • cd 进入 gs-gradle/initial
    • 参考到安装Gradle部分

当你完成后,你可以使用 gs-gradle/complete 来检查你的结果。

配置项目

首先需要配置一个项目给 Gradle 进行构建。为了保证我们能专注于 Gradle,目前最好创建最简单的Java项目。

创建目录结构

在项目主目录下,创建以下子目录;在 *nix 系统下可以使用命令:

mkdir -p src/main/java/hello
└── src
└── main
└── java
└── hello

在 src/main/java/hello 目录中,你可以创建任何 Java 类。为简单起见并且为了与指南的其余部分保持一致,我们建议创建两个类 HelloWorld.java 和 Greeter.java

src/main/java/hello/HelloWorld.java 的源代码:

package hello;

public class HelloWorld {
public static void main(String[] args) {
Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

src/main/java/hello/Greeter.java 的源代码:

package hello;

public class Greeter {
public String sayHello() {
return "Hello world!";
}
}

安装Gradle

到目前为止,我们已经搭建了一个可以用来使用 Gradle 构建的项目,现在到了安装Gradle的时候了。

Gradle可以从 http://www.gradle.org/downloads 下载。我们仅需要下载Gradle的二进制发布包,所以在刚才提供的连接上寻找 gradle-version-bin.zip 文件

(当然,也可以下载 gradle-version-all.zip,它包含源代码、文档以已编译代码)

解压缩下载的文件,并将解压后目录中的 bin 目录加到环境变量中。

可以在命令行中执行以下代码来测试 Gradle 是否安装成功

> gradle

如果你很幸运,嘛事都OK,你会看到下面的welcome信息:

:help

Welcome to Gradle 1.8.

To run a build, run gradle <task> ...

To see a list of available tasks, run gradle tasks

To see a list of command-line options, run gradle --help

BUILD SUCCESSFUL

Total time: 2.675 secs

看到这个了,说明Gradle已经成功安装到系统中了。如果没看到……再去看看 Gradle的手册 先。

Gradle可以做些什么呢?

Gradle已经安装到系统上了,那么它可以做什么呢?在我们为项目创建 build.gradle 文件之前,我们可以先问一下Gradle目前有哪些可用的任务(Tasks):

gradle tasks

我们可以看到可用任务(Tasks)的列表。假设你执行Gradle的目录不存在 build.gradle 文件,你可以看到一些非常基础的任务,类似于:

:tasks

== All tasks runnable from root project

== Build Setup tasks
setupBuild - Initializes a new Gradle build. [incubating]
wrapper - Generates Gradle wrapper files. [incubating] == Help tasks
dependencies - Displays all dependencies declared in root project 'gs-gradle'.
dependencyInsight - Displays the insight into a specific dependency in root project 'gs-gradle'.
help - Displays a help message
projects - Displays the sub-projects of root project 'gs-gradle'.
properties - Displays the properties of root project 'gs-gradle'.
tasks - Displays the tasks runnable from root project 'gs-gradle'. To see all tasks and more detail, run with --all. BUILD SUCCESSFUL Total time: 3.077 secs

尽管上面的列出的任务是可用的,但是如果没有项目的构建配置他们无法提供太多的价值。当配置了项目的 build.gradle 后,一些任务将变得非常有用。

如果在 build.gradle 中配置了插件(plugins)上面的任务列表会变得更长,最好在配置插件后使用 gradle task 看看那些任务是可用的。

刚说到配置插件,马上我们就会配置一个插件来启用基础的 Java 构建功能。

构建Java代码

先从简单的开始,创建一个最简单的只有一行的 build.gradle 文件:

apply plugin: 'java'

别看只有一行配置,提供的能力可不是一点点哦。再执行一下gradle task,我们可以看到任务列表中增加了一些内容,

比如:用来编译java项目的任务、用来创建JavaDoc的任务、用来执行单元测试的任务。

我们经常使用的任务是gradle build,这个任务执行以下操作:编译、执行单元测试、组装Jar文件:

gradle build

几秒钟以后,会看到”BUILD SUCCESSFUL”输出,说明构建已经完成了。

可以到”build”目录中查看构建结构,在这个目录中我们可以看到很多子目录,其中有三个我们需要特别注意:

  • classes: 保存被编译后的.class文件
  • reports: 构建报告(如:测试报告)
  • lib: 组装好的项目包(通常为:.jar或者.war文件)

classes目录包含编译生成的所有.class文件。执行完编译后,我们应该可以在这里找到”HelloWorld.class”和”Greeter.class”。

到目前为止,我们项目并没有申明任何依赖,所以”debendency_cache”目录是空的。

“reports”目录会包含项目单元测试的测试报告,当然,当前项目并未编写任何单元测试,所以,也是空目录。

“lib”目录包含打包后的jar或war文件,在后面的内容中我们将学会如何定义JAR的名称和版本号。

申明依赖

我们的Hello World例程非常简单且不依赖于任何第三方库,但是大多数应用程序都会依赖第三方库提供的通用或复杂的功能。

例如:假设我们希望更好的说”Hello World!”,我们希望应用程序能同时输出当前的日期和时间。

当然这可以使用Java自身的日期和时间相关库,但是我们可以使用”Joda Time”库实现更有趣的功能。

首先,把HelloWorld.jara类修改成下面这样:

package hello;

import org.joda.time.LocalTime;

public class HelloWorld {
public static void main(String[] args) {
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime); Greeter greeter = new Greeter();
System.out.println(greeter.sayHello());
}
}

这里我们的HelloWorld使用”Joda Time”的LocalTime类来获取和输出当前时间。

如果我们马上执行gradle build来构建项目,构建过程将会失败,因为我们并未将”Joda Time”库声明为编译时依赖库。

首先,我们需要添加一些配置来定义第三方库的来源:

repositories {
mavenLocal()
mavenCentral()
}

上面的repositories定义,告诉构建系统通过Maven中央库来检索项目依赖的软件包,

Gradle在很大程度上依赖Maven构建工具的许多约定和基础功能,包括使用Maven中央的库来处理依赖关系。

现在我们可以使用第三方库了,但现需要定义:

dependencies {
compile "joda-time:joda-time:2.2"
}

使用dependencies块,我们定义了一条Joda Time的依赖项。这里,明确指定使用joda-time组内的版本为2.2的joda-time库。

另一个要注意的是,我们在这个依赖定义中指定依赖是compile范围的。意思是,这个库在编译和运行时都需要

(如果我们正在构建WAR文件,这个文件会在/WEB-INF/libs目录下)。另外值得注意的依赖类型包括:

  • providedCompile:在编译期间需要这个依赖包,但在运行期间可能由容器提供相关组件(比如:Java Servlet API)
  • testCompile:依赖项仅在构建和运行测试代码时需要,在项目运行时不需要这个依赖项。

最后,我们来定义我们将生成的Jar文件的名字:

jar {
baseName = 'gs-gradle'
version = '0.1.0'
}

jar块定义如何命名JAR文件,在上面的例子中,我们的JAR文件的名字为:gs-gradle-0.1.0.jar

注:这个时候如果执行 gradle build,Gradle会花一些时间从 Maven 中央库下载 Joda Time 包(具体下载时间依赖于你的网速)

使用Gradle Wrapper来构建项目

Gradle Wrapper是开始一个Gradle构建的首选方式。它包含了windows批处理以及OS X和Linux的Shell脚本。

这些脚本允许我们在没有安装Gradle的系统上执行Gradle构建。要实现这个功能,我们需要在我们的build.gradle文件中增加以下代码:

task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}

执行下面代码来下载和初始化wrapper脚本:

gradle wrapper

命令执行完后,我们可以看到增加了一些新文件。有两个文件在根目录下,

wapper 的 jar 文件和 properties 文件在新增的 gradle/wrapper 目录下。

└── initial
└── gradlew
└── gradlew.bat
└── gradle
└── wrapper
└── gradle-wrapper.jar
└── gradle-wrapper.properties

现在Gradle Wrapper已经可以用来构建系统了。把这些文件增加到版本控制系统中,

然后再任何时候、任何地方只要迁出这些文件就一个按照同样的方式(与当前生成 Wrapper的Gradle版本一致)构建系统。

运行wrapper脚本来构建系统,跟我们之前桥的命令很像:

./gradlew build

当第一次通过wrapper使用指定版本的Gradle构建系统时,wrapper首先下载对应版本的Gradle可执行文件。

Gradle Wrapper 的所有文件在都可以被提交到版本库中,所以,任何人都可以在没有安装Gradle的环境下使用相同版本的 Gradle构建系统。

在这个时候,我们需要重新构建我们的代码,构建的结果目录如下:

build
├── classes
│ └── main
│ └── hello
│ ├── Greeter.class
│ └── HelloWorld.class
├── dependency-cache
├── libs
│ └── gs-gradle-0.1.0.jar
└── tmp
└── jar
└── MANIFEST.MF

Jar 文件中包含我们希望打包的 Gretter 和 HelloWorld 类。

$ jar tvf build/libs/gs-gradle-0.1.0.jar
0 Fri May 30 16:02:32 CDT 2014 META-INF/
25 Fri May 30 16:02:32 CDT 2014 META-INF/MANIFEST.MF
0 Fri May 30 16:02:32 CDT 2014 hello/
369 Fri May 30 16:02:32 CDT 2014 hello/Greeter.class
988 Fri May 30 16:02:32 CDT 2014 hello/HelloWorld.class

需要注意的,即使我们声明了joda-time依赖,但这里也没有包括对应的库文件,而且生成的JAR文件也不是可运行JAR文件。

要想让代码可以运行,我们可以使用Gradle的application插件。增加以下内容到build.gradle文件中。

apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

现在我们的app可以执行了。

$ ./gradlew run
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:run
The current local time is: 16:16:20.544
Hello world! BUILD SUCCESSFUL Total time: 3.798 secs

为了能够将依赖包也以一起打包,比如,我们希望构建一个 WAR 包,可以包含第三方组件的打包格式,

我们可以使用 Gradle 的WAR插件。如果我们使用Spring Boot并且希望得到一个可执行的JAR文件,

我们可以使用 spring-boot-gradle-plugin 插件。在我们的示例中,gradle没有足够的信息来了解我们的目标系统。

但是,目前介绍的内容已经足够我们开始使用Gradle了。

下面是本文需要用的的build.gradle文件:

apply plugin: 'java'
apply plugin: '<span class="wp_keywordlink"><a href="http://res.importnew.com/eclipse" title="Eclipse ImportNew主页" target="_blank">Eclipse</a></span>'
apply plugin: 'application' mainClassName = 'hello.HelloWorld' // tag::repositories[]
repositories {
mavenLocal()
mavenCentral()
}
// end::repositories[] // tag::jar[]
jar {
baseName = 'gs-gradle'
version = '0.1.0'
}
// end::jar[] // tag::dependencies[]
dependencies {
compile "joda-time:joda-time:2.2"
}
// end::dependencies[] // tag::wrapper[]
task wrapper(type: Wrapper) {
gradleVersion = '1.11'
}
// end::wrapper[]

注意:文件中有很多start/end注释,这些注释是为了方便拷贝文件中的内容到文章的各个部分,在实际使用中不需要包含他们。

总结

恭喜,你已经创建了一个简单的然而可用的Gradle构建文件来构建Java项目。

好吧, 感谢看到这

原文摘自:http://www.importnew.com/15881.html

—> http://spring.io/guides/gs/gradle/

使用 Gradle 构建 Java 项目的更多相关文章

  1. 使用gradle构建java项目

    gradle是什么东东 gradle是继ant,maven之后另外一种的面向java的自动化项目构建工具,他是基于groovy语言的.相对于ant,maven,gradle显得更加简单. 安装grad ...

  2. Gradle构建Java项目

    前提:已经安装好Gradle 一.创建目录结构 在项目主目录下,创建以下子目录;在*nix系统下可以使用命令: mkdir -p src/main/java/hello vim src/main/ja ...

  3. 在gradle中构建java项目

    目录 简介 构建java项目的两大插件 管理依赖 编译代码 管理resource 打包和发布 生成javadoc 简介 之前的文章我们讲到了gradle的基本使用,使用gradle的最终目的就是为了构 ...

  4. Gradle构建Java Web应用(转)

    转自:http://www.blogjava.net/jiangshachina/archive/2014/02/03/409285.html 本文是发布在java.net上的一篇摘自于<Gra ...

  5. 使用Gradle构建Android项目

    阅读目录 Gradle是什么? 环境需求 Gradle基本结构 任务task的执行 基本的构建定制 目录配置 签名配置 代码混淆设置 依赖配置 输出不同配置的应用 生成多个渠道包(以Umeng为例) ...

  6. Gradle构建Java Web应用:Servlet依赖与Tomcat插件(转)

    Gradle的官方tutorial介绍了构建Java Web应用的基本方法.不过在使用Servlet做上传的时候会碰到问题.这里分享下如何通过Servlet上传文件,以及如何使用Gradle来构建相应 ...

  7. 使用 Gradle 编译 Java 项目时报错: Could not find Tools.jar

    在使用Android studio进行编译成jar的时候,遇到Gradle 编译错误,听前辈们说是jdk的版本不对,于是乎就更新了一下jdk, 然而可能是我重新安装jdk的时候改变了安装路径, 在pr ...

  8. vscode + gradle 创建 java 项目 - java language server无法启动

    1.在系统上安装一个版本的gradle,用`gradle init --type java-application`创建一个默认的java项目,假设项目目录是hellojava 2.vscode写ja ...

  9. Java-Maven-Runoob:Maven 构建 Java 项目

    ylbtech-Java-Maven-Runoob:Maven 构建 Java 项目 1.返回顶部 1. Maven 构建 Java 项目 Maven 使用原型 archetype 插件创建项目.要创 ...

随机推荐

  1. 小甲鱼零基础python课后题 P24 023递归:这帮小兔崽子

    0.使用递归写一个十进制转换为二进制的函数(要求“取2取余”的方式,结果与调用bin()一样返回字符串式). 答: def Dec2Bin(dec): temp = [] result = '' wh ...

  2. 安装Nginx到linux服务器(Ubuntu)详解

    先去下载一个nginx放到服务器. 然后解压(可参考前面安装tomcat)编译(./configure --prefix=/usr/local/nginx/server/ && mak ...

  3. 通过Ajax方式上传文件(input file),使用FormData进行Ajax请求

    <script type="text/jscript"> $(function () { $("#btn_uploadimg").click(fun ...

  4. 20175211 2017-2018-2 《Java程序设计》第六周学习记录(2)

    目录 1.File类 2.FilenameFilter接口 3.输入输出流 4.使用Scanner解析文件 参考资料 <Java 2实用教程>第10章 输入.输出流 1.File类 常用方 ...

  5. 原生js 基于canvas写一个简单的前端 截图工具

    先看效果 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...

  6. kafka笔记9(监控)

    Kafka提供的所有度量指标都是通过JMX(Java Management Extensions)接口访问 JMX端口查询:  zookeeper上获取端口信息  /brokers/ids/<I ...

  7. Kafka笔记5(内部工作原理)

    集群成员关系: Kafka使用zookeeper维护集群成员信息,每个broker拥有唯一标识符,这个标识符可以在配置文件里指定也可以自动生成,会注册到Zookeeper的/brokers/ids路径 ...

  8. c++ 程序崩溃生成Dump文件

    #include "Windows.h"#include "DbgHelp.h" int GenerateMiniDump(PEXCEPTION_POINTER ...

  9. Your password does not satisfy the current policy requirements问题解决方法

    运行 mysql>set validate_password_policy=0; 目的是,可以设置弱密码.

  10. git----------如何安装gitlab,使用步骤。

    1.配置yum源        vim /etc/yum.repos.d/gitlab-ce.repo 2.复制以下内容到打开的文件中: [gitlab-ce]     name=Gitlab CE ...