[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
- 建置完的結果在build資料夾下
./build (建置結果)
| – libs (放置打包後的jar)
| – reports (放置測試後的報表)
看一下美美的測試報表
多重專案
在中大型專案時一般會依照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
- 建置結果
各自專案下都有一個build資料夾放置結果。
若想要將多個專案的建置結果集中在一個資料夾要怎麼做呢? 在下一個section再進行分享.