天天看點

Gradle多項目建構

Gradle 多項目建構

    • Gradle 多項目建構
      • 目的
      • 概要
      • 建立步驟
        • 1、建立一個根項目
        • 2、添加一個Groovy子目錄工程
        • 3、添加一個java子目錄工程
        • 4、添加文檔工程
        • 5、重構通用建構代碼

目的

多項目建構有助于子產品化。它允許一個人專注于一個大型項目的一個工作領域,而Gradle則負責項目其他部分的依賴關系。

概要

  • 通過組合多個子項目來建立子產品化軟體項目。
  • 讓一個子項目消耗另一個子項目的工件。
  • 輕松使用多邊形項目。
  • 在所有子項目中運作類似的命名任務。
  • 在特定子項目中運作任務而不更改為該子項目的檔案夾。
  • 将常用的子項目設定重構到根項目中。
  • 從根項目中選擇性地配置子項目。

建立步驟

1、建立一個根項目

如下指令建立:

$mkdir  creating-multi-project-builds $cd creating-multi-project-builds $gradle init

生成如下目錄結構

creating-multi-project-builds/ 

|—.gradle/ 

|—gradle/ 

|—build.gradle 

|—gradlew 

|—gradlew.bat 

|—settings.gradle

建立成功,使用./gradlew(或gradlew.bat在Windows上)而不是gradle。然後打開settings.gradle,隻留下如下内容:

打開build.gradle并更換其内容:

allprojects {     repositories {         jcenter()     } }

在build.gradle中添加所有子子產品版本号:

subprojects {     version =  '1.0' }

2、添加一個Groovy子目錄工程

在根目錄建立子目錄:

$ mkdir greeting-library
           

在子目錄下建立gradle配置檔案build.gradle 

并添加如下内容:

apply plugin :  'groovy' dependencies {     compile  'org.codehaus.groovy:groovy:2.4.10'     testCompile  'org.spockframework:spock-core:1.0-groovy-2.4', {         exclude module :  'groovy-all'     } }

然後在根目錄setings.gradle中添加如下類容:

include 'greeting-library'
           

最後在gradle-library中穿件如下目錄:

$ mkdir - p src/main/groovy/greeter $ mkdir - p src/test/groovy/greeter

在src/main/groovy/greeter 包下建立GreetingFormatter.groovy,并添加内容:

package greeter import groovy.transform.CompileStatic @CompileStatic class GreetingFormatter {     static  String greeting( final  String name) {         "Hello, ${name.capitalize()}"     } }

在greeting-library/src/test/groovy/greeter建立 

GreetingFormatterSpec.groovy,添加内容如下:

package greeter import spock.lang. Specification class GreetingFormatterSpec extends Specification {     def 'Creating a greeting'() {         expect:  'The greeting to be correctly capitalized'         GreetingFormatter.greeting( 'gradlephant') ==  'Hello,  Gradlephant'     } }

最後在根目錄下運作指令:./gradlew

$ ./gradlew build :greeting-library:compileJava NO-SOURCE :greeting-library:compileGroovy :greeting-library:processResources NO-SOURCE :greeting-library:classes :greeting-library:jar :greeting-library:assemble :greeting-library:compileTestJava NO-SOURCE :greeting-library:compileTestGroovy :greeting-library:processTestResources NO-SOURCE :greeting-library:testClasses :greeting-library:test :greeting-library:check :greeting-library:build BUILD SUCCESSFUL in 15s 4 actionable tasks: 4 executed

3、添加一個java子目錄工程

在根目錄下建立一個greeter檔案夾

$ mkdir greeter
           

并在greeter中建立build.gradle,添加如下内容:

apply  plugin :  'java' apply  plugin :  'application'

在根目錄下的settings.gradle 添加:

在greeter中建立如下目錄

$ mkdir -p greeter/src/main/java/greeter
           

并在greeter/src/main/java/greeter下建立Greeter.java

package greeter; public  class Greeter {     public static void main(String[] args) {         final String output = GreetingFormatter.greeting(args[ ]);         System.out.println(output);     } }

在greeter子目錄中建立build.gradle,并添加如下内容:

mainClassName =  'greeter.Greeter' dependencies {     compile  project( ':greeting-library') }

最後運作如下:

$ ./gradlew build :greeting-library:compileJava NO-SOURCE :greeting-library:compileGroovy UP-TO-DATE :greeting-library:processResources NO-SOURCE :greeting-library:classes UP-TO-DATE :greeting-library:jar UP-TO-DATE :greeter:compileJava :greeter:compileGroovy NO-SOURCE :greeter:processResources NO-SOURCE :greeter:classes :greeter:jar :greeter:startScripts :greeter:distTar :greeter:distZip :greeter:assemble :greeter:compileTestJava NO-SOURCE :greeter:compileTestGroovy :greeter:processTestResources NO-SOURCE :greeter:testClasses :greeter:test :greeter:check :greeter:build :greeting-library:assemble UP-TO-DATE :greeting-library:compileTestJava NO-SOURCE :greeting-library:compileTestGroovy UP-TO-DATE :greeting-library:processTestResources NO-SOURCE :greeting-library:testClasses UP-TO-DATE :greeting-library:test UP-TO-DATE :greeting-library:check UP-TO-DATE :greeting-library:build UP-TO-DATE BUILD SUCCESSFUL in 5s 11 actionable tasks: 7 executed, 4 up-to-date

在greeter/build.gradle下添加

apply plugin :  'groovy' // then, add the following testCompile dependency to the dependencies block: dependencies {     testCompile  'org.spockframework:spock-core:1.0-groovy-2.4', {         exclude module :  'groovy-all'     } }

在greeter下建立src/test/groovy/greeter目錄

mkdir -p src/test/groovy/greeter
           

在src/test/groovy/greeter建立GreeterSpec.groovy檔案,添加如下代碼:

package greeter import spock.lang. Specification class GreeterSpec extends Specification {     def 'Calling the entry point'() {         setup:  'Re-route standard out'         def buf =  new  ByteArrayOutputStream( )         System.out =  new  PrintStream(buf)         when:  'The entrypoint is executed'         Greeter.main( 'gradlephant')         then:  'The correct greeting is output'         buf.toString() ==  "Hello, Gradlephant\n"     } }

在根目錄下運作./gradlew :greeter:test

$ ./gradlew :greeter:test :greeting-library:compileJava NO-SOURCE :greeting-library:compileGroovy UP-TO-DATE :greeting-library:processResources NO-SOURCE :greeting-library:classes UP-TO-DATE :greeting-library:jar UP-TO-DATE :greeter:compileJava UP-TO-DATE :greeter:compileGroovy NO-SOURCE :greeter:processResources NO-SOURCE :greeter:classes UP-TO-DATE :greeter:compileTestJava NO-SOURCE :greeter:compileTestGroovy UP-TO-DATE :greeter:processTestResources NO-SOURCE :greeter:testClasses UP-TO-DATE :greeter:test UP-TO-DATE BUILD SUCCESSFUL in 0s 5 actionable tasks: 5 up-to-date

4、添加文檔工程

為軟體項目建立文檔被認為是很好的做法。雖然有許多方法可以實作此目标,但您将使用非常流行的Asciidoctor工具。 

在根目錄build.gradle 檔案最頂部添加如下:

plugins {     id  'org.asciidoctor.convert' version  '1.5.6' apply  false }

然後在根目錄下建立docs子項目

$ mkdir docs
           

在docs下建立build.gradle 并添加如下内容:

apply plugin :  'org.asciidoctor.convert' asciidoctor {     sources {         include  'greeter.adoc'     } } build.dependsOn  'asciidoctor'

然後在docs下建立src/docs/asciidoc目錄

mkdir -p src/docs/asciidoc
           

将docs目錄添加到settings.gradle

在/docs/src/docs/asciidoc下建立greeter.adoc檔案 

添加如下内容

= Greeter指令行應用程式 一個簡單的應用程式,示範Gradle多項目的靈活性。 ==安裝 将ZIP或TAR檔案解壓到合适的位置 ==用法 [清單] ---- $ cd greeter-1.0 $ ./bin/greeter gradlephant 你好,Gradlephant ----

運作./gradlew asciidoctor

$ ./gradlew asciidoctor
           

在greeter的build.gradle 檔案中添加如下代碼:

distZip {     from project( ':docs').asciidoctor, {         into  "${project.name}-${version}"     } } distTar {     from project( ':docs').asciidoctor, {         into  "${project.name}-${version}"     } }

然後運作:

$ ./gradlew build
           

5、重構通用建構代碼

在根目錄build.gradle 檔案中添加如下代碼:

configure( subprojects. findAll {it.name ==  'greeter' || it.name ==  'greeting-library'} ) {     apply plugin :  'groovy'     dependencies {         testCompile  'org.spockframework:spock-core:1.0-groovy-2.4', {             exclude module :  'groovy-all'         }     } }

删除greeting-library/build.gradle和greeter/build.gradle中的如下代碼

apply plugin :  'groovy' dependencies {     testCompile  'org.spockframework:spock-core:1.0-groovy-2.4', {         exclude module :  'groovy-all'     } }

重新運作頂層的gradle以確定它仍然可以正常工作:

$ ./gradlew clean build
           

$mkdir creating-multi-project-builds $cd creating-multi-project-builds $gradle init

繼續閱讀