2012-12-13 54 views
9

我有一個具有java應用程序以及android應用程序的gradle項目。將配置應用於Gradle構建腳本中的特定項目

root/ 
    build.gradle 
    settings.gradle 
    java1/ 
    java2/ 
    android1/ 
    android2/ 
    java3/ 

什麼是構建我的構建腳本的最佳做法?我是一個總的gradle新手,並且正在將項目從maven遷移到gradle。

我想要做什麼,而不是

configure(subprojects) {} 

應用插件等具體的東西。

configure(java1, java2, java3) { // java specifics } 
configure(android1, android2) { // android specifics } 

我可能從錯誤的方式接近這一點。

更明確我需要將插件java只應用於java項目和Android項目的android插件。

回答

4

有多種方式,這取決於你想要什麼...一些例子:

// Configures just project java1 
project(":java1") { ... } 

// Configures projects java1 and java2 
["java1","java2"].each { name -> 
    project(":$name") { ... } 
} 

您可以正常使用Groovy來查找/遍歷所有的項目。

+0

也是一位時髦的新手。我更喜歡你的方法,因爲它更具可擴展性。謝謝 – predhme

+0

實際上經過測試,這是行不通的。該腳本抱怨它無法找到根目錄(在這種情況下是作爲項目根目錄的目錄名稱)。 在根項目「root」中找不到包含路徑':root'的項目。 我簡單地複製並粘貼 //配置項目java1和Java2 [ 「java1」, 「Java2的」 每個{名稱 - > 項目( 「:$名」){...}} 。 錯誤行指向項目(「:$ name」) – predhme

+0

事後,我繼續查找gradle/groovy apis,並且能夠編寫一個方法來返回子項目的子集,我可以將其傳遞到configure()方法。這樣可行。謝謝 – predhme

3

另一種選擇:

configure([ project(':sub1'), project(':sub2'), ... ]) { 
    ... 
} 
0

最短和最簡單的選項:

configure(subprojects.findAll()) { 
    if (it.name.equals('MY_PROJECT')) { 
    ... 
    } else { 
    ... 
    } 
} 
0

另一種方法......

在你做這樣定義你的項目settings.gradle:

gradle.ext.javaProjects=[] 
gradle.ext.androidProjects=[] 

javaProject('java1') 
javaProject('java2') 
javaProject('java3') 
androidProject('android1') 
androidProject('android2') 

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
} 

def androidProject(String name) { 
    gradle.ext.androidProjects.add(name) 
    include ":$name" 
} 

Now你可以參考那些在你的根的build.gradle:

def javaProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 
def androidProjects = subprojects.findAll {gradle.ext.javaProjects.contains(it.name)}; 

configure(javaProjects) { 
... 
} 
configure(androidProjects) { 
... 
} 

也許這就是矯枉過正...但我通常在我的settings.gradle反正項目定義方法。例如。如果你想把所有的java項目放在java文件夾下,你可以這樣定義:

def javaProject(String name) { 
    gradle.ext.javaProjects.add(name) 
    include ":$name" 
    project(":$name").projectDir = file('java/'+ name) 
} 
相關問題