| tags |
|
|
|---|---|---|
| projects |
本指南引导您通过使用Gradle来创建一个简单的java项目。
-
大概15分钟
-
一个你喜欢的文本编辑器或IDE
-
JDK 6 或更新的版本
首先你需要建立一个用来Gradle构建的Java项目。为了把焦点集中在Gradle,我们现在使项目尽可能简单。
在 src/main/java/hello 目录下, 你能创建一个你想要的Java类。为了保持与本指南其余部分的一致性,创建这两个类: HelloWorld.java 和 Greeter.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。
这是强烈建议使用安装程序: * 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,看它能做什么。甚至在你为项目创建一个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构建功能。
从简单的开始,在本指南开始的时候你创建的 <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构建的首选方式。它包括一个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
包括两个预期的类文件 Greeter 和 HelloWorld ,以及一个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
|
这里有许多嵌入的开始/结束的注释。这使得可以将构建文件的一些信息提取到本指南中,以获得上面的详细解释。你不需要它们出现您的产品的构建文件中。 |