[Gradle]Quick Start 系列-4 建置應用程式專案

[Gradle]Quick Start 系列-4 建置應用程式專案

如同Java其它有用的工具, Gradle也有強大的plugin架構, 並且在安裝時也已經擁有常用的像java, ant, maven... 等plugin. 將這些工具包裝成一個又一個的任務, 依我們的需求來引用, 非常方便.

 

Java plugin 中最通用的任務 build 可以協助我們編譯、打包、單位測試及程式碼檢查. 且在類別庫相依時還可簡單的透過設定使用Maven的Repository.

 

在以下文章中分為單一專案、多項專案來展示要如何運用Gradle來建置我們的應用程式軟體.

 

單一專案

 

build 任務依賴了編譯(compileJava)、打包(jar)、測試(test)、檢查(check) 等任務, 我們要運用它來幫我們做第一個Hello World的案例.

  • 引入 source code 及 resource

預設是在執行gradle目錄下

./src (原始碼根)
  | –main (production 原始碼)
      | –java (放置java code)
      | – resources (放置resource)
  | –test (測試代碼)
      | –java (放置測試java code)
      | – resources (放置測試用的resource)
 
HelloWorld.java 依賴了Log4j
import org.apache.log4j.*;
 
public class HelloWorld {
    private static Logger logger;
    private String name;
 
    public HelloWorld(String name) {
        this.name = name;
        if(logger==null){
            logger = Logger.getLogger(this.getClass());
        }
        logger.info("Name=" + name);
    }
 
    public String say() {
        return "Hi. " + name;
    }
}
 
HelloWorldTest.java 
import org.junit.Test;
import static org.junit.Assert.*;
 
public class HelloWorldTest {
    @Test
    public void testSay() {
        HelloWorld person = new HelloWorld("Hector");
        assertEquals("Hi. Hector", person.say());
    }
}
 
  • 撰寫build.gradle
   1:  apply plugin: 'java'
   2:   
   3:  sourceCompatibility = 1.5
   4:  archivesBaseName = 'helloworld'
   5:  version = '1.0'
   6:   
   7:  jar {
   8:      manifest {
   9:          attributes 'Implementation-Title': 'Hector Gradle Quick Start 系列', 'Implementation-Version': version
  10:      }
  11:  }
  12:   
  13:  repositories {
  14:      mavenCentral()
  15:  }
  16:   
  17:  dependencies {
  18:      compile group: 'log4j', name: 'log4j', version: '1.2.16'
  19:      testCompile group: 'junit', name: 'junit', version: '4.+'
  20:  }
  21:   
  22:  compileJava.dependsOn clean
  23:   

第1行 apply plugin: 'java'  引入java plug-in

第13行是使用maven的repository

第17行closure中分別宣告了production code依賴及 test code依賴.

  • 執行gradle build

image

  • 建置完的結果在build資料夾下

./build (建置結果)

  | – libs (放置打包後的jar)

  | – reports (放置測試後的報表)

 

看一下美美的測試報表

image

多重專案

在中大型專案時一般會依照Layer去分割多個專案, 如: Persistence, Business Logic, Service … 等. 所以會稍稍做點工

  • 建立root 並加入子專案
./multiproject
  | – api
  | – form

即上章節的專案再往前加一個root專案,

 

  • 於root專案中加入設定檔

build.gradle (可宣告子專案共用的設定)

subprojects {
    apply plugin: 'java'
 
    repositories {
       mavenCentral()
    }
 
    dependencies {        
        testCompile 'junit:junit:4.8.2'
    }
 
    version = '1.0'
}

 

settings.gradle (宣告要引入的子專案)




 

  • 子專案的設定檔中加入依賴設定

./form/build.gradle (設定畫面元件要去使用api元件)

sourceCompatibility = 1.5
archivesBaseName = 'helloworld_main'
version = '1.0'
 
jar {
    manifest {
        attributes 'Implementation-Title': 'Hector Gradle Quick Start 系列', 'Implementation-Version': version, 'Main-Class': 'my.gradle.Main'
    }
}
 
dependencies {
    compile project(':api')    
}
 
  • 使用Gradle build

image

  • 建置結果

各自專案下都有一個build資料夾放置結果。

若想要將多個專案的建置結果集中在一個資料夾要怎麼做呢? 在下一個section再進行分享.