Gradle 筆記—Java構建入門

wumm 8年前發布 | 37K 次閱讀 Java Gradle 項目構建

來自: http://www.uml.org.cn/jchgj/201603022.asp

Gradle是一個通用的構建工具,通過它的構建腳本你可以構建任何你想要實現的東西,不過前提是你需要先寫好構建腳本的代碼。而大部分的項目,它們的構建流程基本是一樣的,我們不必為每一個工程都編寫它的構建代碼,因為Gradle已經為我們提供了相應的插件。Gradle 本身自帶了許多插件,而對于Gradle沒有的插件,可以去github上看看有沒有其他人實現,或自己實現。對Java項目而言,Gradle有Java插件,提供了像編譯、測試、打包之類的功能。

這里簡單介紹一下Java插件。

Java插件為構建項目定義了許多的默認設置,像源文件目錄,編譯后的文件存放位置等等。如果你是按著默認的規則來的,那么構建腳本將會很簡單。當然,如果項目結構不一樣,也可以自己指定這些規則。這里暫不介紹,只說一下基本的用法。

1. 使用Java插件

只需要要構建腳本中添加以下代碼:

apply plugin: 'java'

定義一個Java項目只需要添加這么一句代碼,它會為你添加Java插件,以及一些內置任務。

默認情況下,Gradle會在src/main/java中查找你的源碼,在src/test/java中查找你的測試代碼,而src/main/resources下的文件都會被打包,src/test/resources下的文件會被包含在classpath中用于測試。所有輸出的文件都保存在build目錄里,而生成的jar包則是在build/libs里面。

2. 構建項目

Java插件幫你定義了許多任務,這個可以通過前面說的gradle tasks命令來看。當執行gradle build 時,Gradle會執行編譯,測試,并且將源文件和資源文件打成jar包。

除了build之外,還有幾個常用的任務,如下:

clean:刪除build目錄和其他構建時生成的文件。

assemble:編譯并打包,但不執行單元測試。不過一些其他插件可能會增強這個任務,例如 War 插件會再打出war包。

check:編譯并測試代碼。其他插件可能會增強這個任務。比如 Code-quality 插件會讓這個任務去執行Checkstyle。

3. 外部依賴

通常一個項目會有許多外部依賴,我們需要在構建腳本中告訴Gradle在哪里可以找到這些依賴。比如如果使用maven中央倉庫的話,我們可以通過以下代碼來添加倉庫:

repositories {  
mavenCentral()  
}

然后再通過下面代碼添加依賴:

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

上面的代碼中,聲明了在編譯期,需要依賴 commons-collections,在測試期需要依賴 junit。關于依賴的內容,下一篇會有更詳細的筆記。

4. 自定義項目

前面提到,Java插件為項目定義了許多默認配置,如果我們需要,這些配置都是可以由我們自己來定義的。如下面例子,指定項目版本號和JDK版本號,并且添加一些屬性到JAR包的manifest文件中:

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

Java插件添加的都是普通任務,所以前面一章介紹的Gradle機制也可以用在這里,比如修改任務的依賴,添加任務行為,甚至重寫某個任務等等。下面的例子是修改test任務來添加系統屬性:

test {  
systemProperties 'property': 'value'  
}

5. 發布JAR包

以下代碼是發布JAR包到本地中。發布到maven倉庫或jcenter倉庫以后再討論。

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

執行gradle uploadArchives即可發布該JAR包。

6. 創建Eclipse項目

如果想把項目導入到eclipse當中,需要使用一個Eclipse插件:

apply plugin: 'eclipse'

執行gradle eclipse會生成eclipse項目文件,關于此插件以后再細說。

7. 小結

下面是一個完整的Java項目構建腳本:

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

8. 多項目構建

項目結構:

multiproject/  
  api/  
  services/webservice/  
  shared/

首先需要創建一個settings.gradle的配置文件,來聲明構建要包含哪些項目。文件的內容如下:

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

多項目構建,以后會詳談。

9. 公共配置

對多項目構建當中,會有一些配置是共同的。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'  
    }  
}

上面的配置就會子項目都應用了java和eclipse-wtp插件,聲明了maven中央倉庫,添加了測試期的依賴junit,以及定義了項目版本包和打成的jar包里的manifest文件的屬性。

10. 項目依賴

同一個構建中的項目可以建立項目依賴。比如api子項目要依賴share子項目生成的jar包,那么在api子項目的構建腳本中可以使用以下代碼:

dependencies {  
    compile project(':shared')  
}

11. 多項目的打包發布

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

artifacts {  
   archives dist  
}

這段代碼我還沒能理解。先記著。

 本文由用戶 wumm 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!