用Gradle构建java工程 (Building Java Projects with Gradle)

更新:下面是一个在gradle 中创建工程结构的插件

https://github.com/townsfolk/gradle-templates


本教程带领大家构建一个简单的java工程

  What you’ll build

我们将创建一个简答的app然后用Gradle构建它

 What you’ll need

  大约15分钟

  一个你喜欢的编辑器或者是IDE

  JDK6 或者更新

How to complete this guide

像其他所有Spring的新手指导一样,你可以从0开始,然后完成每一步,或者你可以跳过你熟悉的步骤。不管哪种方法,你都会完成。

从0开始,你可以跳至Set up the project.

跳过基础,你可以按照下面的方法做:

从下面的git地址,检出未你准备的代码,解压。

 进入 gs-gradle/initial

 跳至 installGradle 模块

当你完成所有的步骤,你可以用gs-gradle/complete目录下的代码检查你的结果。

set up the project

首先为Gradle,创建一个java工程。为了将主要精力集中在Gradle上,我们工程化越简单越好。

Create the directory structure

在你选中的目录中,创建如下的目录结构;例如在类unix系统中使用mkdir -p src/main/java/hello 命令创建

 
└── src
    └── main
        └── java
            └── hell

你可以在src/main/java/hello这个目录中创建任何你想创建的java类。但是为了和教程中其他的分部保持一致性,Spring建议你创建两个类: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!";
  }
}


 

Install Gradle

现在用Gradle构建的java工程已经准备好了,我们可以安装Gradle。

可以从http://www.gradle.org/downloads下载Gradle的zip文件。只需要二进制文件,看起来名字像gradle-version-bin.zip这样的。

解压、将Gradle的bin目录的路劲添加到path中。

为了测试Gradle是否安装完成,在命令行中运行:

gradle

如果一些顺利,你将会看到如下的欢迎信息:

:help
 
Welcome to Gradle 1.8.
 
To run a build, run gradle <task> ...
 
To see a list of available tasks, rungradle tasks
 
To see a list of command-line options, rungradle --help
 
BUILD SUCCESSFUL
 
Total time: 2.675 secs

现在安装完成。

Find out what Gradle can do

现在Gradle已经安装完成,我们看看他能做什么.在我们为工程创建build.gradle之前,你可以问问他,什么样的task是我们可以用的。

gradle tasks

上述的命令将列出一系列的可用的task,如果在一个没有创建build.gradle文件的目录下执行gradle命令,你讲看到非常基础的task,像这样:

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

即使这些task是可用的,但是如果没有工程的构建配置文件(build.gradle),这些task是不能提供任何有意义的价值的。当你充实build.gradle文件,一些task会更加有用。这些可用的task会随着你添加一些插件自动的增加。所以你会时而,执行gradle命令,看看现在什么样的task是可用的。

说道添加插件,下面,我们添加一个有java基础构建构建功能的插件

Build Java code

从最简单的快开始,创建一个基础的build.gradle文件,其中只包括一行:

 apply plugin: 'java'

在配置文件中的一行代码,有巨大的作用。再次执行gradle tasks,你讲看到task增加了,增加构建工程的task,创建javaDoc的task,运行test的task。

你将频繁的使用gradle build 。这个task会编译源码,运行测试,将编译文件打包到一个JAR文件中,你可以运行如下:

gradle build

一会之后,BUILD SUCCESSFUL便是构建完成。

在build目录下可以看到编译的成果。在他里面你将找到一些目录,其中三个值得注意:

classes. The project’s compiled .classfiles.编译好的.class文件。

reports.编译时产生的报告(例如:测试报告)

libs.打包好的JAR文件

在class目录中,有编译java源码产生的.class文件。尤其,你应该能发现HelloWorld.class 和 Greeter.class.

到此,工程没有任何的第三方的依赖,所以dependency_cache目录为空。

因为我们没有任何的测试,所以reports也没有。

在lib目录中是JAR文件。如果你是从github上检查的代码,那JAR文件的名字应该是initial.jar,但是这个名字可能不是你想要的。

Declare dependencies

一个简单的Hello World是不需要第三方的依赖的,但是大多数的app但是需要第三方依赖的。

例如,我们除了打印Hello World!,我们还想打印当前的时间。

首先,修改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 为编译时的一个依赖。你可以添加下面的几行。

repositories { mavenCentral() }
dependencies {
  compile"joda-time:joda-time:2.2"
}

第一行表示,如果构建中需要依赖,可以从maven的中央仓库中下载。Gradle非常依赖Maven构建工具,当然也包括,将maven的中央仓库作为自己的仓库。

在dependencies模块中,我们之生命一个依赖,Joda Time。

另一个值得注意的实在“compile”,说明这个依赖是在编译时可用的。

providedCompile.编译时可用,但是在运行时由容器提供。

testCompile. 只用在编译和测试可用,构建和运行时不可用。

现在如果你运行gradle build,grad可将从maven的仓库中下载所需的依赖,然后构建成功。

Build your project with Gradle Wrapper

Gradle Wrapper 是一种更加方便的使用gradle的方法,他包括了为支持windows的批处理脚本和支持类unix的shell脚本。这些脚本是你,在不安装gradle时候,也可以用gradle。安装wrapper只需要在你的build.gradle文件中添加如果下代码:

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

运行下面的命令,下载和初始化wrapper脚本:

gradle wrapper

完成这个task之后,你讲会发现一些文件。两个脚本在根目录下。Wrapper的jar文件和属性文件已经被添加在gradle/wrapper目录中。

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


现在已经可以用Wrapper构建你的工程了。你将和之前一样,运行gradle build命令构建工程。

./gradlew build

第一行执行Gradle的版,他讲下载和缓存执行版本gradle的二进制文件。 Gradle Wrapper 文件将和代码一样提交给版本控制器,这样任何人,获取代码后,不用安装gradle,就可以构建工程。

这是最终的build.gradle文件:

build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'
 
repositories { mavenCentral() }
dependencies {
   compile "joda-time:joda-time:2.2"
}
 
task wrapper(type: Wrapper) {
   gradleVersion = '1.8'
}

Summary

恭喜!你已经创建一个简单而且有效的gradle构建工程的配置


gradle可以看看:http://www.infoq.com/cn/news/2011/04/xxb-maven-6-gradle






展开阅读全文

没有更多推荐了,返回首页