在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ Java 構(gòu)建入門
問題反饋
Gradle 插件
Scala 插件
Gradle 命令行的基本使用
任務(wù)詳述
安裝
概述
教程-雜七雜八
構(gòu)建環(huán)境
依賴管理基礎(chǔ)
使用 Gradle 圖形用戶界面
使用文件
CodeNarc 插件
Sonar 插件
Groovy 插件
Sonar Runner 插件
OSGi 插件
Ear 插件
Gradle 守護(hù)進(jìn)程
Java 插件
簡(jiǎn)介
構(gòu)建基礎(chǔ)
FindBugs 插件
Groovy 快速入門
JaCoCo 插件
PMD 插件
War 插件
Checkstyle 插件
日志
Java 構(gòu)建入門
Jetty 插件
從 Gradle 中調(diào)用 Ant
標(biāo)準(zhǔn)的 Gradle 插件
Web 工程構(gòu)建
JDepend 插件
編寫構(gòu)建腳本

Java 構(gòu)建入門

Java 插件

如你所見,Gradle 是一個(gè)通用工具。它可以通過腳本構(gòu)建任何你想要實(shí)現(xiàn)的東西,真正實(shí)現(xiàn)開箱即用。但前提是你需要在腳本中編寫好代碼才行。

大部分 Java 項(xiàng)目基本流程都是相似的:編譯源文件,進(jìn)行單元測(cè)試,創(chuàng)建 jar 包。使用 Gradle 做這些工作不必為每個(gè)工程都編寫代碼。Gradle 已經(jīng)提供了完美的插件來解決這些問題。插件就是 Gradle 的擴(kuò)展,簡(jiǎn)而言之就是為你添加一些非常有用的默認(rèn)配置。Gradle 自帶了很多插件,并且你也可以很容易的編寫和分享自己的插件。Java plugin 作為其中之一,為你提供了諸如編譯,測(cè)試,打包等一些功能。

Java 插件為工程定義了許多默認(rèn)值,如Java源文件位置。如果你遵循這些默認(rèn)規(guī)則,那么你無需在你的腳本文件中書寫太多代碼。當(dāng)然,Gradle 也允許你自定義項(xiàng)目中的一些規(guī)則,實(shí)際上,由于對(duì) Java 工程的構(gòu)建是基于插件的,那么你也可以完全不用插件自己編寫代碼來進(jìn)行構(gòu)建。

后面的章節(jié)我們通過許多深入的例子介紹了如何使用 Java 插件來進(jìn)行以來管理和多項(xiàng)目構(gòu)建等。但在這個(gè)章節(jié)我們需要先了解 Java 插件的基本用法。

一個(gè)基本 Java 項(xiàng)目

來看一下下面這個(gè)小例子,想用 Java 插件,只需增加如下代碼到你的腳本里。

采用 Java 插件

build.gradle
apply plugin: 'java'

備注:示例代碼可以在 Gralde 發(fā)行包中的 samples/java/quickstart 下找到。

定義一個(gè) Java 項(xiàng)目只需如此而已。這將會(huì)為你添加 Java 插件及其一些內(nèi)置任務(wù)。

添加了哪些任務(wù)?

你可以運(yùn)行 gradle tasks 列出任務(wù)列表。這樣便可以看到 Java 插件為你添加了哪些任務(wù)。

標(biāo)準(zhǔn)目錄結(jié)構(gòu)如下:

project  
    +build  
    +src/main/java  
    +src/main/resources  
    +src/test/java  
    +src/test/resources  

Gradle 默認(rèn)會(huì)從 src/main/java 搜尋打包源碼,在 src/test/java 下搜尋測(cè)試源碼。并且 src/main/resources 下的所有文件按都會(huì)被打包,所有 src/test/resources 下的文件 都會(huì)被添加到類路徑用以執(zhí)行測(cè)試。所有文件都輸出到 build 下,打包的文件輸出到 build/libs 下。

構(gòu)建項(xiàng)目

Java 插件為你添加了眾多任務(wù)。但是它們只是在你需要構(gòu)建項(xiàng)目的時(shí)候才能發(fā)揮作用。最常用的就是 build 任務(wù),這會(huì)構(gòu)建整個(gè)項(xiàng)目。當(dāng)你執(zhí)行 gradle build 時(shí),Gralde 會(huì)編譯并執(zhí)行單元測(cè)試,并且將 src/main/* 下面 class 和資源文件打包。

構(gòu)建 Java 項(xiàng)目

運(yùn)行 gradle build 的輸出結(jié)果

Output of gradle build
> gradle build
:compileJava
:processResources
:classes
:jar
:assemble
:compileTestJava
:processTestResources
:testClasses
:test
:check
:build
BUILD SUCCESSFUL
Total time: 1 secs

其余一些較常用的任務(wù)有如下幾個(gè):

clean

刪除 build 目錄以及所有構(gòu)建完成的文件。

assemble

編譯并打包 jar 文件,但不會(huì)執(zhí)行單元測(cè)試。一些其他插件可能會(huì)增強(qiáng)這個(gè)任務(wù)的功能。例如,如果采用了 War 插件,這個(gè)任務(wù)便會(huì)為你的項(xiàng)目打出 War 包。

check

編譯并測(cè)試代碼。一些其他插件也可能會(huì)增強(qiáng)這個(gè)任務(wù)的功能。例如,如果采用了 Code-quality 插件,這個(gè)任務(wù)會(huì)額外執(zhí)行 Checkstyle。

外部依賴

通常,一個(gè) Java 項(xiàng)目擁有許多外部依賴。你需要告訴 Gradle 如何找到并引用這些外部文件。在 Gradle 中通常 Jar 包都存在于倉(cāng)庫(kù)中。倉(cāng)庫(kù)可以用來搜尋依賴或發(fā)布項(xiàng)目產(chǎn)物。下面是一個(gè)采用 Maven 倉(cāng)庫(kù)的例子。

添加 Maven 倉(cāng)庫(kù)

build.gradle
repositories {
    mavenCentral()
}

添加依賴。這里聲明了編譯期所需依賴 commons-collections 和測(cè)試期所需依賴 junit。

添加依賴

build.gradle
dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

了解更多可參閱依賴管理基礎(chǔ)

自定義項(xiàng)目

Java 插件為你的項(xiàng)目添加了眾多默認(rèn)配置。這些默認(rèn)值通常對(duì)于一個(gè)普通項(xiàng)目來說已經(jīng)足夠了。但如果你覺得不適用修改起來也很簡(jiǎn)單。看下面的例子,我們?yōu)?Java 項(xiàng)目指定了版本號(hào)以及所用的 JDK 版本,并且添加一些屬性到 mainfest 中。

自定義 MANIFEST.MF

build.gradle
sourceCompatibility = 1.5
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart', 'Implementation-Version': version
    }
}

都有哪些可用屬性?

可以執(zhí)行 gradle propertie s來得到項(xiàng)目的屬性列表。用這條命令可以看到插件添加的屬性以及默認(rèn)值。

Java 插件添加的都是一些普通任務(wù),如同他們寫在 Build 文件中一樣。這意味著前面章節(jié)展示的機(jī)制都可以用來修改這些任務(wù)的行為。例如,可以設(shè)置任務(wù)的屬性,添加任務(wù)行為,更改任務(wù)依賴,甚至是重寫覆蓋整個(gè)任務(wù)。在下面的例子中,我們將修改 test 任務(wù),這是一個(gè) Test 類型任務(wù)。讓我們來在它執(zhí)行時(shí)為它添加一些系統(tǒng)屬性。

為 test 添加系統(tǒng)屬性

build.gradle
test {
    systemProperties 'property': 'value'
}

發(fā)布 jar 包

如何發(fā)布 jar 包?你需要告訴 Gradle 發(fā)布到到哪。在 Gradle 中 jar 包通常被發(fā)布到某個(gè)倉(cāng)庫(kù)中。在下面的例子中,我們會(huì)將 jar 包發(fā)布到本地目錄。當(dāng)然你也可以發(fā)布到遠(yuǎn)程倉(cāng)庫(kù)或多個(gè)遠(yuǎn)程倉(cāng)庫(kù)中。

發(fā)布 jar 包

build.gradle
uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

執(zhí)行 gradle uploadArchives 以發(fā)布 jar 包。

創(chuàng)建 Eclipse 文件

若要把項(xiàng)目導(dǎo)入 Eclipse 中,你需要添加另外一個(gè)插件到你的腳本文件中。

Eclipse plugin

build.gradle
apply plugin: 'eclipse'

執(zhí)行 gradle eclipse 來生成 Eclipse 項(xiàng)目文件。

示例匯總

這是示例代碼匯總得到的一個(gè)完整腳本:

Java 示例 - 一個(gè)完整構(gòu)建腳本

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'
       }
    }
}

多項(xiàng)目構(gòu)建

現(xiàn)在來看一個(gè)典型的多項(xiàng)目構(gòu)建的例子。項(xiàng)目結(jié)構(gòu)如下:

多項(xiàng)目構(gòu)建-項(xiàng)目結(jié)構(gòu)

Build layout
multiproject/
  api/
  services/webservice/
  shared/

備注: 本示例代碼可在 Gradle 發(fā)行包的 samples/java/multiproject 位置找到

此處有三個(gè)工程。api 工程用來生成給客戶端用的 jar 文件,這個(gè) jar 文件可以為 XML webservice 提供 Java 客戶端。webservice 是一個(gè) web 應(yīng)用,生成 XML。shared 工程包含的是前述兩個(gè)工程共用的代碼。

多項(xiàng)目構(gòu)建定義

定義一個(gè)多項(xiàng)目構(gòu)建工程需要在根目錄(本例中與 multiproject 同級(jí))創(chuàng)建一個(gè)setting 配置文件來指明構(gòu)建包含哪些項(xiàng)目。并且這個(gè)文件必需叫 settings.gradle 本例的配置文件如下:

多項(xiàng)目構(gòu)建中的 settings.gradle

settings.gradle
include "shared", "api", "services:webservice", "services:shared"

公共配置

對(duì)多項(xiàng)目構(gòu)建而言,總有一些共同的配置.在本例中,我們會(huì)在根項(xiàng)目上采用配置注入的方式定義一些公共配置。根項(xiàng)目就像一個(gè)容器,子項(xiàng)目會(huì)迭代訪問它的配置并注入到自己的配置中。這樣我們就可以簡(jiǎn)單的為所有工程定義主配置單了:

多項(xiàng)目構(gòu)建-公共配置

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'
    }
}

值得注意的是我們?yōu)槊總€(gè)子項(xiàng)目都應(yīng)用了 Java 插件。這意味著我們?cè)谇懊嬲鹿?jié)學(xué)習(xí)的內(nèi)容在子項(xiàng)目中也都是可用的。所以你可以在根項(xiàng)目目錄進(jìn)行編譯,測(cè)試,打包等所有操作。

工程依賴

同一個(gè)構(gòu)建中可以建立工程依賴,一個(gè)工程的 jar 包可以提供給另外一個(gè)工程使用。例如我們可以讓 api 工程以依賴于 shared 工程的 jar 包。這樣 Gradle 在構(gòu)建 api 之前總是會(huì)先構(gòu)建 shared 工程。

多項(xiàng)目構(gòu)建-工程依賴

api/build.gradle
dependencies {
    compile project(':shared')
}

打包發(fā)布

如何發(fā)布,請(qǐng)看下文:

多項(xiàng)目構(gòu)建-發(fā)布

api/build.gradle
task dist(type: Zip) {
    dependsOn spiJar
    from 'src/dist'
    into('libs') {
        from spiJar.archivePath
        from configurations.runtime
    }
}
artifacts {
   archives dist
}

下一步目標(biāo)?

本章中,我們了解了如何構(gòu)建一個(gè)基本 Java 工程。但這都是一小部分基礎(chǔ),用 Gradle 還可以做很多事。關(guān)于 了解更多可參閱 Java 插件,The Java Plugin,并且你可以在 Gradle 發(fā)行包中的 samples/java 目錄找到更多例子。

另外,不要忘了繼續(xù)閱讀依賴管理基礎(chǔ)內(nèi)容