## 7.1\. The Java plugin 關于 Java 插件
Gradle 是一個通用的構建工具,它能構建任何基于你的構建腳本的東西。開箱即用,當然除非你添加代碼到你的構建腳本里,不然它不會構建任何東西。
很多 Java 項目都有類似的基本流程:編譯 Java 源文件,運行單元測試,創建 JAR 文件。如果你不是把代碼從頭寫到尾,那還能接受。現在有了 Gradle 就不用忍受這些。解決問題的方法就是 插件。插件是 Gradle 配置的擴展,通常是添加配置前的 task。Gradle 裝載很多插件,這樣可以方便共享。其中,Java 插件 就是添加 task 到 project ,會編譯、單元測試你的 Java 代碼,并構建進一個 JAR 文件。
Java 插件 是基于約定的。這意味著,該插件定義了 項目 許多方面的的默認值,如 Java 源文件所在的位置。如果你跟隨你的項目的約定,你一般不需要在你的構建腳本做太多。Gradle 允許您自定義您的項目,如果你不想或不遵循某種公約。事實上,因為 Java 項目的支持作為一個插件來實現的,你不需要使用所有的插件來構建一個Java項目,如果你不想。
后續章節,我們有許多案例關于 Java 插件、依賴管理、多 project。在這一章中,我們想給你一個初始的想法關于如何使用 Java 插件來構建一個 Java 項目。
## [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#72-a-basic-java-project-基本的-java-項目)7.2\. A basic Java project 基本的 Java 項目
為了使用 Java 插件,添加下面代碼到構建文件:
Example 7.1\. Using the Java plugin
build.gradle
~~~
apply plugin: 'java'
~~~
*注意,完整的項目源碼見[https://github.com/waylau/Gradle-2-User-Guide-Demos](https://github.com/waylau/Gradle-2-User-Guide-Demos)?中 java/quickstart*
這個就是 定義一個 Java 項目的全部。它會將 Java 插件應用到項目中,并且添加很多 task。
Gradle 會在 src/main/java 目錄下尋找產品代碼,在 src/test/java 尋找測試代碼 。 另外在 src/main/resources 包含了資源的 JAR 文件, src/test/resources 包含了運行測試。所有的輸出都在 build 目錄下,JAR 在 build/libs 目錄下
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#721-building-the-project-構建項目)7.2.1\. Building the project 構建項目
在 Java 插件增添了相當多的 task 在 project 中。然而,只有少數的task 是需要在 構建 project 時需要的。最常用的任務是 build task,這就能構建一個完整的 project 。當你運行 gradle build,Gradle 將編譯和測試您的代碼,并創建一個包含您的主要類和資源的 JAR 文件。
Example 7.2\. Building a Java project
執行 gradle build 輸出
~~~
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1 secs
~~~
其他有用的 task 有:
**clean**
刪除 build 目錄,移除所有構建的文件
**assemble**
編譯打包代碼,但不運行單元測試。其他插件帶給這個 task 更多特性,比如如果你使用 War 插件,task 將給 project 構建 WAR 文件
**check**
編譯測試你的代碼。其他插件帶給這個 task 提供更多檢查類型。比如,你使用 checkstyle 插件, 這個 task 建輝在你的代碼中 執行 Checkstyle
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#722-external-dependencies-外部依賴)7.2.2\. External dependencies 外部依賴
Java 項目經常會有一些外部 JAR 的依賴。為了引用這些 JAR 文件,需要在 Gradle 里面配置。在 Gradle,類似與 JAR 文件將會放在 repository 中。一個 repository 可以被依賴的項目獲取到,或者提交項目的拷貝到 repository 中,或者兩者都可。比如,我們使用 Maven repository :
Example 7.3\. Adding Maven repository
build.gradle
~~~
repositories {
mavenCentral()
}
~~~
我們添加一些依賴,聲明了 編譯時 需要的依賴和測試時需要的依賴
Example 7.4\. Adding dependencies
build.gradle
~~~
dependencies {
compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
testCompile group: 'junit', name: 'junit', version: '4.+'
}
~~~
詳見[Chapter 8\. Dependency Management Basics 依賴管理的基礎知識](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2008.%20Dependency%20Management%20Basics%20%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md)
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#723-customizing-the-project-自定義-項目)7.2.3\. Customizing the project 自定義 項目
在 Java 插件添加屬性到您的項目。這些屬性通常足在啟動時使用默認值。如果他們不適合你,你很容易改他們。讓我們看一看我們的示例。在這里,我們將說明我們的 Java 項目的版本號,包括 Java 的版本號。我們也添加一些屬性的 JAR 文件清單。
Example 7.5\. Customization of MANIFEST.MF
build.gradle
~~~
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': version
}
}
~~~
Java 插件添加的 task 和 平常的 task 完全一樣,在構建文件中聲明。這意味著你可以使用任何在前面的章節中自定義這些 task 的機制。例如,您可以設置 task 的性能,添加行為的一個任務,更改 task 的依賴,或替換完全的 task 。在我們的示例,我們將配置測試 task ,這是類型?[Test](http://www.gradle.org/docs/current/dsl/org.gradle.api.tasks.testing.Test.html)?,增加一個系統屬性,當執行測試時:
Example 7.6\. Adding a test system property
build.gradle
~~~
test {
systemProperties 'property': 'value'
}
~~~
*有哪些屬性存在?*
*執行 gradle properties 可以列出 project 的屬性,你可以看到 Java 插件添加的屬性和他們的默認值*
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#724-publishing-the-jar-file-發布-jar-文件)7.2.4\. Publishing the JAR file 發布 JAR 文件
需要告訴 Gradle 要發布 JAR 的位置。在 Gradle 中, 產物 比如 JAR 文件等是發布到庫中的。我們的例子中是發布到了本地路徑。你也可以發布到 遠程位置或者多個位置。
Example 7.7\. Publishing the JAR file
build.gradle
~~~
uploadArchives {
repositories {
flatDir {
dirs 'repos'
}
}
}
~~~
執行 gradle uploadArchives 來發布
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#725-creating-an-eclipse-project-創建一個-eclipse-project)7.2.5\. Creating an Eclipse project 創建一個 Eclipse project
創建 Eclipse 特點的描述文件,比如 .project,需要添加插件
Example 7.8\. Eclipse plugin
build.gradle
~~~
apply plugin: 'eclipse'
~~~
執行 gradle eclipse 來生產 Eclipse project 文件。更多 eclipse task 相關內容詳見?[Chapter 38\. The Eclipse Plugin 關于 Eclipse 插件](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2038.%20The%20Eclipse%20Plugin%20%E5%85%B3%E4%BA%8E%20Eclipse%20%E6%8F%92%E4%BB%B6.md)
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#726-summary-總結)7.2.6\. Summary 總結
下面是完整的示例 build 文件
Example 7.9\. Java example - complete build file
build.gradle
~~~
apply plugin: 'java'
apply plugin: 'eclipse'
sourceCompatibility = 1.5
version = '1.0'
jar {
manifest {
attributes 'Implementation-Title': 'Gradle Quickstart',
'Implementation-Version': 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'
}
}
}
~~~
## [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#73-multi-project-java-build-多-project-的-java-構建)7.3\. Multi-project Java build 多 project 的 Java 構建
下面是一個 多 project 構建的 項目結構:
Example 7.10\. Multi-project build - hierarchical layout
~~~
multiproject/
api/
services/webservice/
shared/
services/shared/
~~~
*注意,完整的項目源碼見[https://github.com/waylau/Gradle-2-User-Guide-Demos](https://github.com/waylau/Gradle-2-User-Guide-Demos)?中 java/multiproject*
里面包含 4 個 project。?`api`?是產生出 JAR 文件 給客戶端加載提供給 Java 客戶端需要的 XML webservice。?`webservice`是一個 web 應用返回 XML 。`shared`?包含了?`api`、`webservice`?使用的代碼。項目?`services/shared`?包含了 依賴`shared`?的代碼。
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#731-defining-a-multi-project-build-定義-build-文件)7.3.1\. Defining a multi-project build 定義 build 文件
配置文件的名字叫 settings.gradle,如下
Example 7.11\. Multi-project build - settings.gradle file
settings.gradle
~~~
include "shared", "api", "services:webservice", "services:shared"
~~~
詳見?[Chapter 57\. Multi-project Builds 多項目構建](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2057.%20Multi-project%20Builds%20%E5%A4%9A%E9%A1%B9%E7%9B%AE%E6%9E%84%E5%BB%BA.md)
## [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#732-common-configuration-常見配置)7.3.2\. Common configuration 常見配置
有很多常見的配置。我們的示例中使用了 configuration injection (配置注入)。在這里,根項目就像一個容器,subprojects 方法遍歷容器中的元素(實例中的 project ),并將指定的配置。這樣我們可以很容易地定義所有檔案的 manifest 的內容,和一些常見的依賴關系:
Example 7.12\. Multi-project build - common configuration
build.gradle
~~~
subprojects {
apply plugin: 'java'
apply plugin: 'eclipse-wtp'
repositories {
mavenCentral()
}
dependencies {
testCompile 'junit:junit:4.11'
}
version = '1.0'
jar {
manifest.attributes provider: 'gradle'
}
}
~~~
注意,示例中 在 所有 子 project 中應用了 Java 插件。意思是 task 和配置屬性將會出現在雖偶有 子 project 中。所以,你可以 在根 project 目錄中,運行 gradle build 來編譯、測試、將所有 project 打包成 JAR 。
注意,插件只應用在 subprojects 包含的區域,其他根級別的將不適用。
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#733-dependencies-between-projects-項目間的依賴)7.3.3\. Dependencies between projects 項目間的依賴
在相同的構建里,您可以添加項目之間的依存關系,這樣,例如,一個項目的 JAR 文件可以用來編譯另外一個項目。在`api`?構建文件中我們將添加對`shared`項目的依賴。由于這種依賴,Gradle 將確保?`shared`在`api`?之前獲得構建。
Example 7.13\. Multi-project build - dependencies between projects
api/build.gradle
~~~
dependencies {
compile project(':shared')
}
~~~
詳見?[Chapter 57\. Multi-project Builds 多項目構建](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2057.%20Multi-project%20Builds%20%E5%A4%9A%E9%A1%B9%E7%9B%AE%E6%9E%84%E5%BB%BA.md)?中 Section 57.7.1, “Disabling the build of dependency projects” 如何禁用這個功能
### [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#734-creating-a-distribution-創建發布包)7.3.4\. Creating a distribution 創建發布包
添加發布包,提供給客戶端裝載
Example 7.14\. Multi-project build - distribution file
api/build.gradle
~~~
task dist(type: Zip) {
dependsOn spiJar
from 'src/dist'
into('libs') {
from spiJar.archivePath
from configurations.runtime
}
}
artifacts {
archives dist
}
~~~
## [](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2007.%20Java%20Quickstart%20%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B%20Java.md#74-where-to-next-下步工作)7.4\. Where to next? 下步工作
你可以查看更多關于 Java 插件 ,見[Chapter 23\. The Java Plugin 關于 Java 插件](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2023.%20The%20Java%20Plugin%20%E5%85%B3%E4%BA%8E%20Java%20%E6%8F%92%E4%BB%B6.md)。也可以在[https://github.com/waylau/Gradle-2-User-Guide-Demos](https://github.com/waylau/Gradle-2-User-Guide-Demos)?中 java 目錄下,看到更多 Java 的示例
繼續?[Chapter 8\. Dependency Management Basics 依賴管理的基礎知識](https://github.com/waylau/Gradle-2-User-Guide/blob/master/Chapter%2008.%20Dependency%20Management%20Basics%20%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86%E7%9A%84%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86.md)
- 關于
- 第1章 Introduction 介紹
- 第2章 Overview 總覽
- 第3章 Tutorials 教程
- 第4章 Installing Gradle 安裝
- 第5章 Troubleshooting 問題解決
- 第6章 Build Script Basics 構建腳本的基礎識
- 第7章 Java Quickstart 快速開始 Java
- 第8章 Dependency Management Basics 依賴管理的基礎知識
- 第9章 Groovy Quickstart 快速開始 Groovy
- 第10章 Web Application Quickstart 快速開始 Web 應用
- 第11章 Using the Gradle Command-Line 使用 Gradle 命令行
- 第12章 Using the Gradle Graphical User Interface 使用 Gradle 圖形化用戶界面
- 第13章 Writing Build Scripts 編寫構建腳本
- 第14章 Tutorial - 'This and That' 教程-這個那個
- 第15章 More about Tasks 更多關于任務
- 第16章 Working With Files 跟文件工作
- 第17章 Using Ant from Gradle 從 Gradle 使用 Ant
- 第18章 Logging 日志.md
- 第19章 The Gradle Daemon 守護進程
- 第20章 The Build Environment 構建環境
- 第21章 Gradle Plugins 插件
- 第22章 Standard Gradle plugins 標準 Gradle 插件
- 附錄E Existing IDE Support and how to cope without it 支持的 IDE 以及如何應對沒有它