Gradle借助Groovy語言作為其配置腳本,使得Gradle變的十分強大,幾乎是無所不能,我們在掌控這個強大且功能繁多的工具時也比較困難和凌亂,因此本文記錄一些使用過程常見的配置,以備不時之需!
Gradle如何包含文件
apply from: "./libraries.gradle"
如何指定build輸出目錄和版本號
buildDir = "target"
version = '1.0'
在執行Gradle命令時如何指定參數
gradle task -Pprofile=development
相當於在build.gradle中定義了一個變量profile,所以可以在上下文中直接使用profile。
GRADLE和IDEA集成時如何不自動下載依賴源碼和JavaDOC
idea {
module {
downloadJavadoc = false
downloadSources = false
}
}
如何解決編譯、生成JavaDOC和測試時注釋的亂碼問題
寫在一起:
[compileJava, javadoc, compileTestJava]*.options*.encoding = 'UTF-8'
單獨寫:
javadoc {
options.encoding = "UTF-8"
}
…
如何自定義Build后的Classes目錄或Resources目錄的輸出位置
Gradle默認把Classes和Resources分開放,那么把他們放在一起:
sourceSets {
main {
output.resourcesDir = "${buildDir}/classes/main"
}
}
Gradle Jetty配置范例和如何指定webdefault.xml
指定webdefault.xml是為了解決在Windows下靜態文件鎖定的問題
apply plugin: "jetty"
jettyRun {
contextPath = '/'
reload = 'manual'
webDefaultXml = file('webdefault.xml')
}
httpPort = 8080
stopPort = 8011
stopKey = 'jetty6'
如何使用.properties文件
Gradle會自動加載文件 gradle.properties
在根目錄新建或打開gradle.properties
spring = 3.2.2.RELEASE
hibernate = 4.1.7.Final
在build.gradle中使用
直接使用
println spring
println hibernate
在字符串中使用
println "spring: $spring"
//或
println "hibernate: ${hibernate}!"
如何限定Task的執行條件
test.onlyIf { !Boolean.getBoolean('skip.tests') }
Task間如何傳遞變量
//Test任務,注意不是Task
test {
//暴露變量testResult,默認表示單元測試會成功
ext.testResult = true
//...
}
task testCompleted <<{
//讀取testResult值,如果成功... 如果失敗... 想想這個能做什么?
if (test.testResult) {
//...
}
}
//在test執行完畢后無論成功或失敗都執行testCompleted任務
test.finalizedBy testCompleted
子項目如何定義
打開或新建settings.gradle文件
include 'm1'
include 'm2'
或者 include 'm1', 'm2'
指定子項目的獨立Gradle腳本名,以項目名命名,而非build.gradle:
rootProject.children.each { project ->
project.buildFileName = "${project.name}.gradle"
//校驗子項目合法性
assert project.projectDir.isDirectory()
assert project.buildFile.isFile()
}
根項目和子項目如何共享配置
allprojects {
apply plugin: 'idea'
repositories {
mavenCentral()
mavenLocal()
}
//…
}
所有子項目共享配置
subprojects {
apply plugin: 'java'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
}
注意
上面的allprojects和subprojects都可以接收到一個project的參數,因為他們是一個Set<Project>
。
這樣可以根據不同的子項目個性化定義配置如:
subprojects { subProject ->
apply plugin: 'idea'
buildDir = "target"
if ( ! subProject.name.startsWith( 'm1' ) ) {
apply plugin: 'java'
configurations {
//...
}
dependencies {
//...
}
}
}
而且在任何時候都使用subprojects.each {project -> …}
.
或者使用configure來批量指定部分項目的配置
configure(subprojects.findAll {it.name.contains('m1')}) {
apply plugin: 'war'
}
在多項目配置中如何單獨指定單個項目配置
project(‘:m1’) {
apply plugin: 'war'
dependencies {
//...
}
}
':m1' 項目名稱。
子項目間如何依賴
dependencies {
compile(
project(':m1')
)
}
---不間斷更新。