2013-10-23 20 views
4

我正在使用Gradle創建多項目構建文件。許多子項目需要通過傳遞某些參數來執行存在於另一個子項目中的任務。這在Gradle中如何實現?如何使用參數調用另一個子項目構建文件中的任務

例如:

root project 
    - project B : task X 
    - project A : task Y (param m, param n) 

我需要projectB.taskX調用projectA.taskY(M,N)

更新:

次級項目A具有類型的任務JavaExec需要輸入參數到屬性文件的位置

task generateCode(dependsOn:['classes','build'], type: JavaExec) { 

    main = 'jjrom.ObjectGen' 
    classpath = sourceSets.main.runtimeClasspath 

    args 'arg1', 'arg2', file(propertiesFilePath).path 
} 

現在,有10個子項目,所有這些項目都需要使用包含屬性文件位置的參數來調用此任務'generateCode'。此外,應該在構建可以使用dependsOn實現的每個子項目之前執行此任務。

我的Java項目組織代碼:

trunk/ 
    projA/src/java/../ObjectGen.java 
    projB/src/java/../properties.xml 
    projC/src/java/../properties.xml 
    projD/src/java/../properties.xml 
    .... 
+0

不確定您所說的「需要執行另一個子項目中存在的任務」。請舉個具體的例子。 –

回答

3

任務不能調用另一個任務。相反,解決這個問題的方法是給所有十個子項目添加一個generateCode任務。您可以從根本上構建腳本類似下面的代碼做到這一點:

subprojects { 
    apply plugin: 'java' 
    configurations { 
     codegen 
    } 
    dependencies { 
     // A contains the code for the code generator 
     codegen project(':A') 
    } 
    task generateCode(type: JavaExec) { 
     main = 'jjrom.ObjectGen' 
     classpath = configurations.codegen 
     args 'arg1', 'arg2' 
    } 
    compileJava.dependsOn(generateCode) 
} 

如果在何處屬性文件的位置,可以在子項目構建腳本中添加此信息不一般模式:

generateCode { 
    args file('relative/path/to/properties/file') 
} 
相關問題