文章

《Gradle user guide》翻译 — 7.2 一个基本的Java项目

7.2 一个基本的Java项目

我们来看一个简单的例子。把下面的代码加入你的构建文件,以使用Java插件:

例子 7.1 使用Java插件

1
2
build.gradle
apply plugin: 'java'

注意:该样例的代码可在Gradle的安装包中的samples/java/quickstart路径下找到。

这就是你定义一个Java项目所需要做的一切。这就会在你项目里使用Java插件,该插件会给你的项目增加很多任务。

Gradle期望在src/main/java路径下找到你项目的源代码,并且测试在src/test/java路径下的代码。同时,在src/main/resources路径下的文件也会作为资源文件包含在JAR包中,并且src/test/resources下的所有文件会包含在classpath下以运行测试程序。所有的输出文件都生成在build目录下,JAR包生成在build/libs目录下。

7.2.1 编译项目

Java插件给你的项目构建增加很多任务。然而,只有屈指可数的任务你将会在构建项目的时候用到。最常用的任务是build任务,该任务会对项目执行完整的编译。当你运行gradle build的时候,Gradle会编译并测试你的代码,然后生成一个包含类和资源文件的JAR包。

例7.2 构建Java项目</div>

gradle build输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1 secs

其他一些有用的任务是:

clean
     清空build编译目录,删除所有构建文件。

assemble
     编译并给你的代码打包,但是不执行单元测试。其他的插件为本任务增加更多的特性支持。例如,如果你使用War插件,那么该任务也会给你的项目编译出War包。

check
     编译并测试代码。其他的插件会对该任务提供更多检测支持。例如,如果你使用Code-quality插件,那么该任务会同时对你的代码执行Checkstyle检测。

7.2.2 外部依赖

通常,一个Java项目会依赖一些外部的JAR文件。为了在项目中引用这些JAR文件,你需要告诉Gradle哪里可以找到它们。在Gradle里,JAR包等资源放在资源库(repository)中。资源库可以用来查找项目的依赖,也可以用于发布项目归档。在这个样例中,我们将使用公共的Maven库:

样例7.3 添加Maven库

repositories {
    mavenCentral()
}

我们来添加一些依赖。这里,我们会声明我们产品的类有在编译期依赖于commons collections,同时我们的测试类在编译期依赖于junit:

样例7.4 添加依赖

1
2
3
4
dependencies {
       compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
       testCompile group: 'junit', name: 'junit', version: '4.+'
}

更多的内容,可在第八章的依赖管理基础中找到。

7.2.3 自定义项目

Java插件给你的项目添加了许多属性。这些属性都有默认值,并且通常情况下这些默认值足以满足使用。如果这些值不满足要求,那么修改起来也是很容易的。我们来看一下例子。这里,我们将指定Java项目的版本号,同时指定我们编写代码所使用的Java版本。我们也会在JAR包的描述清单中(manifest)增加一些属性。

样例7.5 自定义MANIFEST.MF

1
2
3
4
5
6
sourceCompatibility = 1.5
   version = '1.0'
   jar {
       manifest {
           attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': versi
} }
什么属性是可用的?
你可以使用gradle properties命令去列出项目的属性。这可以让你看到Java插件添加的属性及其默认值。

Java插件添加的也是规则的任务,如果把它们声明在构建文件里也是完全一样的。这就意味这,你可以使用任何之前章节中介绍的机制去自定义这些任务。例如,你可以设置任务的属性,给任务增加行为,修改任务的依赖,或是完全的替代任务。在我们的样例中,我们将要配置test任务,该任务的类型是Test,当测试执行的时候增加一个系统属性:

样例7.6 增加一个测试系统属性

1
2
3
test {
    systemProperties 'property': 'value'
}

7.2.4 发布JAR包</div>

通常,JAR包需要被发布到某个地方。为了完成这个功能,你需要告诉Gradle把JAR包发布到哪里。在Gradle中,如JAR之类的压缩包都被发布到库中。在我们的样例中,我们将会发布到本地仓库。你也可以发布到一个或多个远端地址。

样例7.7 发布JAR包</div>

1
2
3
4
5
6
uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
} }
}

执行gradle uploadArchives命令以发布JAR包。

7.2.5 创建Eclipse工程</div>

为了把你的项目导入到Eclipse,你需要在构建文件中增加其他插件:

样例 7.8 Eclipse 插件

1
apply plugin: 'eclipse'

现在执行gradle eclipse命令以生成Eclipse工程文件。更多关于Eclipse任务可以在第38章 Eclipse插件中看到。

7.2.6 概要

下面是完整的构建文件的样例:

样例7.9 Java样例-完整构建文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
   apply plugin: 'java'
   apply plugin: 'eclipse'
   sourceCompatibility = 1.6
   version = '1.0'
   jar {
       manifest {
           attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version'
   } }
  repositories {
       mavenCentral()
  }
   dependencies {
       compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
       testCompile group: 'junit', name: 'junit', version: '4.+'
  }
   test {
       systemProperties 'property': 'value'
   }
   uploadArchives {
       repositories {
          flatDir {
              dirs 'repos'
          } 
      }
  }

本文由作者按照 CC BY 4.0 进行授权