構建工具之 - Gradle一般使用常見問答


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

---不間斷更新。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM