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

鍍金池/ 教程/ 物聯(lián)網(wǎng)/ 快速開始 Java
快速開始 Web 應(yīng)用
更多關(guān)于任務(wù)
編寫構(gòu)建腳本
守護進程
問題解決
日志
插件
總覽
快速開始 Java
教程-"This and That"
使用 Gradle 圖形化用戶界面
從 Gradle 使用 Ant
依賴管理的基礎(chǔ)
構(gòu)建環(huán)境
處理文件
構(gòu)建腳本的基本
使用 Gradle 命令行
快速開始 Groovy
安裝
介紹

快速開始 Java

關(guān)于 Java 插件

Gradle 是一個通用的構(gòu)建工具,它能構(gòu)建任何基于你的構(gòu)建腳本的東西。開箱即用,當然除非你添加代碼到你的構(gòu)建腳本里,不然它不會構(gòu)建任何東西。

很多 Java 項目都有類似的基本流程:編譯 Java 源文件,運行單元測試,創(chuàng)建 JAR 文件。如果你不是把代碼從頭寫到尾,那還能接受?,F(xiàn)在有了 Gradle 就不用忍受這些。解決問題的方法就是 插件。插件是 Gradle 配置的擴展,通常是添加配置前的 task。Gradle 裝載很多插件,這樣可以方便共享。其中,Java 插件 就是添加 task 到 project ,會編譯、單元測試你的 Java 代碼,并構(gòu)建進一個 JAR 文件。

Java 插件 是基于約定的。這意味著,該插件定義了 項目 許多方面的的默認值,如 Java 源文件所在的位置。如果你跟隨你的項目的約定,你一般不需要在你的構(gòu)建腳本做太多。Gradle 允許您自定義您的項目,如果你不想或不遵循某種公約。事實上,因為 Java 項目的支持作為一個插件來實現(xiàn)的,你不需要使用所有的插件來構(gòu)建一個Java項目,如果你不想。

后續(xù)章節(jié),我們有許多案例關(guān)于 Java 插件、依賴管理、多 project。在這一章中,我們想給你一個初始的想法關(guān)于如何使用 Java 插件來構(gòu)建一個 Java 項目。

基本的 Java 項目

為了使用 Java 插件,添加下面代碼到構(gòu)建文件:

build.gradle

    apply plugin: 'java'

注意,完整的項目源碼見https://github.com/waylau/Gradle-2-User-Guide-Demos 中 java/quickstart*

這個就是 定義一個 Java 項目的全部。它會將 Java 插件應(yīng)用到項目中,并且添加很多 task。

Gradle 會在 src/main/java 目錄下尋找產(chǎn)品代碼,在 src/test/java 尋找測試代碼 。 另外在 src/main/resources 包含了資源的 JAR 文件, src/test/resources 包含了運行測試。所有的輸出都在 build 目錄下,JAR 在 build/libs 目錄下

構(gòu)建項目

在 Java 插件增添了相當多的 task 在 project 中。然而,只有少數(shù)的task 是需要在 構(gòu)建 project 時需要的。最常用的任務(wù)是 build task,這就能構(gòu)建一個完整的 project 。當你運行 gradle build,Gradle 將編譯和測試您的代碼,并創(chuàng)建一個包含您的主要類和資源的 JAR 文件。

執(zhí)行 gradle build 輸出

    > gradle build
    :compileJava
    :processResources
    :classes
    :jar
    :assemble
    :compileTestJava
    :processTestResources
    :testClasses
    :test
    :check
    :build

    BUILD SUCCESSFUL

    Total time: 1 secs

其他有用的 task 有:

clean

刪除 build 目錄,移除所有構(gòu)建的文件

assemble

編譯打包代碼,但不運行單元測試。其他插件帶給這個 task 更多特性,比如如果你使用 War 插件,task 將給 project 構(gòu)建 WAR 文件

check

編譯測試你的代碼。其他插件帶給這個 task 提供更多檢查類型。比如,你使用 checkstyle 插件, 這個 task 建輝在你的代碼中 執(zhí)行 Checkstyle

外部依賴

Java 項目經(jīng)常會有一些外部 JAR 的依賴。為了引用這些 JAR 文件,需要在 Gradle 里面配置。在 Gradle,類似與 JAR 文件將會放在 repository 中。一個 repository 可以被依賴的項目獲取到,或者提交項目的拷貝到 repository 中,或者兩者都可。比如,我們使用 Maven repository :

build.gradle

    repositories {
        mavenCentral()
    }

我們添加一些依賴,聲明了 編譯時 需要的依賴和測試時需要的依賴

build.gradle

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

詳見依賴管理的基礎(chǔ)知識

自定義項目

在 Java 插件添加屬性到您的項目。這些屬性通常足在啟動時使用默認值。如果他們不適合你,你很容易改他們。讓我們看一看我們的示例。在這里,我們將說明我們的 Java 項目的版本號,包括 Java 的版本號。我們也添加一些屬性的 JAR 文件清單。

build.gradle

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

Java 插件添加的 task 和 平常的 task 完全一樣,在構(gòu)建文件中聲明。這意味著你可以使用任何在前面的章節(jié)中自定義這些 task 的機制。例如,您可以設(shè)置 task 的性能,添加行為的一個任務(wù),更改 task 的依賴,或替換完全的 task 。在我們的示例,我們將配置測試 task ,這是類型 Test ,增加一個系統(tǒng)屬性,當執(zhí)行測試時:

build.gradle

    test {
        systemProperties 'property': 'value'
    }

有哪些屬性存在?

執(zhí)行 gradle properties 可以列出 project 的屬性,你可以看到 Java 插件添加的屬性和他們的默認值*

發(fā)布 JAR 文件

需要告訴 Gradle 要發(fā)布 JAR 的位置。在 Gradle 中, 產(chǎn)物 比如 JAR 文件等是發(fā)布到庫中的。我們的例子中是發(fā)布到了本地路徑。你也可以發(fā)布到 遠程位置或者多個位置。

build.gradle

    uploadArchives {
        repositories {
           flatDir {
               dirs 'repos'
           }
        }
    }

執(zhí)行 gradle uploadArchives 來發(fā)布

創(chuàng)建一個 Eclipse project

創(chuàng)建 Eclipse 特點的描述文件,比如 .project,需要添加插件

build.gradle

    apply plugin: 'eclipse'

執(zhí)行 gradle eclipse 來生產(chǎn) Eclipse project 文件。

總結(jié)

下面是完整的示例 build 文件

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

多 project 的 Java 構(gòu)建

下面是一個 多 project 構(gòu)建的 項目結(jié)構(gòu):

    multiproject/
      api/
      services/webservice/
      shared/
      services/shared/

注意,完整的項目源碼見https://github.com/waylau/Gradle-2-User-Guide-Demos 中 java/multiproject*

里面包含 4 個 project。 api 是產(chǎn)生出 JAR 文件 給客戶端加載提供給 Java 客戶端需要的 XML webservice。 webservice 是一個 web 應(yīng)用返回 XML 。shared 包含了 api、webservice 使用的代碼。項目 services/shared 包含了 依賴 shared 的代碼。

定義 build 文件

配置文件的名字叫 settings.gradle,如下

settings.gradle

    include "shared", "api", "services:webservice", "services:shared"

常見配置

有很多常見的配置。我們的示例中使用了 configuration injection (配置注入)。在這里,根項目就像一個容器,subprojects 方法遍歷容器中的元素(實例中的 project ),并將指定的配置。這樣我們可以很容易地定義所有檔案的 manifest 的內(nèi)容,和一些常見的依賴關(guān)系:

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 中應(yīng)用了 Java 插件。意思是 task 和配置屬性將會出現(xiàn)在雖偶有 子 project 中。所以,你可以 在根 project 目錄中,運行 gradle build 來編譯、測試、將所有 project 打包成 JAR 。

注意,插件只應(yīng)用在 subprojects 包含的區(qū)域,其他根級別的將不適用。

項目間的依賴

在相同的構(gòu)建里,您可以添加項目之間的依存關(guān)系,這樣,例如,一個項目的 JAR 文件可以用來編譯另外一個項目。在api 構(gòu)建文件中我們將添加對shared項目的依賴。由于這種依賴,Gradle 將確保 sharedapi 之前獲得構(gòu)建。

api/build.gradle

    dependencies {
        compile project(':shared')
    }

創(chuàng)建發(fā)布包

添加發(fā)布包,提供給客戶端裝載

api/build.gradle

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

    artifacts {
       archives dist
    }