Skip to content

webGoBetter/gs-gradle

Repository files navigation

tags
gradle
projects

本指南引导您通过使用Gradle来创建一个简单的java项目。

你将构建什么

你将创建一个简单的应用然后使用Gradle构建它。

你需要什么

  • 大概15分钟

  • 一个你喜欢的文本编辑器或IDE

  • JDK 6 或更新的版本

创建一个项目

首先你需要建立一个用来Gradle构建的Java项目。为了把焦点集中在Gradle,我们现在使项目尽可能简单。

src/main/java/hello 目录下, 你能创建一个你想要的Java类。为了保持与本指南其余部分的一致性,创建这两个类: HelloWorld.javaGreeter.java.

src/main/java/hello/HelloWorld.java

link:initial/src/main/java/hello/HelloWorld.java[role=include]

src/main/java/hello/Greeter.java

link:initial/src/main/java/hello/Greeter.java[role=include]

安装Gradle

现在,你已经为Gradle构建准备了一个项目,下一步就是安装Gradle。

这是强烈建议使用安装程序: * http://sdkman.io/ * Home brew (通过brew安装gradle)

作为最后的手段,如果这些工具都不能满足你的需要,你可以从http://www.gradle.org/downloads下载二进制文件。只有二进制文件是必需的,所以找链接 gradle-version-bin.zip 。(你也可以选择 gradle-version-all.zip 得到源文件以及二进制文件。)

解压文件到您的计算机,然后加入 bin 文件夹到你的路径。Unzip the file to your computer, and add the bin folder to your path.

测试Gradle的安装,在命令行运行Gradle :

gradle

如果一切顺利,你看到一个欢迎信息:

:help

Welcome to Gradle 2.3.

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,看它能做什么。甚至在你为项目创建一个build.gradle文件之前,你都可以问它什么任务是可用的:

gradle tasks

你应该看到一列可用的任务。假设你在一个没有 build.gradle 文件的文件夹中运行,你会看到一些非常基本的任务,像这样:

:tasks

== All tasks runnable from root project

== Build Setup tasks
setupBuild - Initializes a new Gradle build. [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 时,任务列表会增长,所以你会偶尔想再次运行 tasks 看有什么可用任务。

说到添加插件,下一步你添加一个插件,启用基本的java构建功能。

构建Java代码

从简单的开始,在本指南开始的时候你创建的 <project folder> 文件夹下创建一个非常基本的 build.gradle 文件。给它一条线:

link:initial/build.gradle[role=include]

在构建配置里的这一行带来了大量的能力。再次运行 gradle tasks ,你看新任务添加到列表中,包括构建工程,创建JavaDoc和运行测试代码。

你会频繁地使用 gradle build 任务。这项任务编译,测试,组装代码成一个JAR文件。你可以像这样运行它:

gradle build

几秒钟后,"BUILD SUCCESSFUL" 表明构建已完成。

看到构建影响的结果,到 build 文件夹看看。在其中你会发现几个目录,包括这三个著名的文件夹:

  • classes. 该项目编译的类文件。

  • reports. 建立产生的报告(如测试报告)。

  • libs. 组装项目库(通常 JAR 和/或 WAR 文件)。

类文件夹包含了从java代码编译生成的 .class 文件。具体来说,你应该找到HelloWorld.class和Greeter.class。

在现在,该项目没有任何依赖库,所以没有 dependency_cache 文件夹。

报告文件夹应该包含一个对项目运行单元测试的报告。因为项目没有任何的单元测试,报告将无聊的。

libs文件夹应该包含一个一项目的文件夹命名的JAR文件。再往下,你会看到你可以指定的JAR和它的版本名称。

声明依赖

简单的Hello World示例是完全自包含的,不依赖于任何额外的库。然而,大多数应用程序依赖于外部库来处理通用的和复杂的功能。

例如,假设除了说 "Hello World!" ,您希望应用程序打印当前日期和时间。虽然你可以在本地的java库使用日期和时间的工具,你可以使用Joda Time 的库让事情更有趣。

首先,将helloworld.java改得看起来像这样:

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作为编译依赖,构建会失败。

首先,您需要为第三方库添加一个源。

link:complete/build.gradle[role=include]

repositories 块表明构建应从Maven的中央存储库解析的依赖关系。Gradle非常依赖由Maven构建工具提供的许多约定和工具,包括选择使用Maven的中央仓库作为一个依赖库源。

现在我们已经准备好了第三方库,让我们声明一些。

link:complete/build.gradle[role=include]

dependencies 块中,你声明Joda-Time作为一个依赖。具体来说,你要求(阅读从右到左)2.2版的joda-time库,在joda-time组。

另一个关于这种依赖关系需要注意的是,这是一个 compile 依赖性,他们应该可以在编译时有效的(如果你正在建立一个 WAR 的文件,应该包含在WAR的 /WEB-INF/libs 的文件夹里)。其他值得注意的依赖类型包括:

  • providedCompile. 是编制项目代码所需的依赖,但会在运行代码的容器的运行时(runtime)提供(例如,Java Servlet API)。

  • testCompile. 编译和运行测试所需的依赖, 但是不是构建或者运行项目运行时代码所需的。

最后,让我们指定JAR工件的名称。

link:complete/build.gradle[role=include]

jar 块指定JAR文件将如何命名。在这种情况下,它会使用 gs-gradle-0.1.0.jar

现在,如果你运行 gradle build ,Gradle应该从Gradle的中央存储库解析到Joda Time的依赖,构建将会成功。

Gradle Wrapper(包装器)编译你的项目

Gradle Wrapper是开始Gradle构建的首选方式。它包括一个Windows的批处理脚本和一个用于OS X和Linux的shell脚本。这些脚本允许你运行一个Gradle构建而不需要在你的系统上安装Gradle。这是添加到你构建文件的一些东西,但它被包含到Gradle里,所以不再有任何的需要。相反,您只需使用以下命令。

$ gradle wrapper --gradle-version 2.13

完成此任务后,您将注意到一些新文件。这两个脚本在文件夹的根目录,而包装器 jar和属性文件已被添加到一个新的 gradle/wrapper 文件夹中。

└── <project folder>
    └── gradlew
    └── gradlew.bat
    └── gradle
        └── wrapper
            └── gradle-wrapper.jar
            └── gradle-wrapper.properties

Gradle Wrapper现在可以建立自己的项目。将其添加到版本控制系统中,克隆项目的每个人都可以构建相同的版本控制系统。它可以用在相同的方式作为一个安装版的Gradle。运行包装器脚本来执行构建任务,就像您以前做的那样:

./gradlew build

当您第一次运行一个指定的版本的Gradle包装器,它会下载和缓存那个版本的Gradle二进制文件。Gradle封装器文件的目的是致力于源控制,任何人都可以无需先安装和配置一个特定版本的Gradle来构建项目。

在这个阶段,您将构建代码。你可以在这里看到结果:

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

包括两个预期的类文件 GreeterHelloWorld ,以及一个JAR文件。匆匆一瞥:

$ 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文件也不会运行。

使代码可运行,我们可以使用Gradle的 application 插件。添加到您的 build.gradle 文件。

apply plugin: 'application'

mainClassName = 'hello.HelloWorld'

然后你可以运行应用程序!

$ ./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 文件:

build.gradle

link:complete/build.gradle[role=include]
Note
这里有许多嵌入的开始/结束的注释。这使得可以将构建文件的一些信息提取到本指南中,以获得上面的详细解释。你不需要它们出现您的产品的构建文件中。

总结

祝贺你!你已经为构建java项目创建了一个简单而有效的Gradle项目定义。

About

使用Gradle构建Java项目 :: 学习如何使用Gradle构建Java项目。

Resources

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors