2013-01-17 20 views
1

如何在build.gradle文件中設置屬性並允許每個開發人員在本地覆蓋它?我想:如何覆蓋build.gradle中定義的屬性?

gradle.properties:

MY_NAME = "Jonathon" 
MY_COLOR = "blue" 

的build.gradle:

ext.MY_NAME = "John Doe" 
task showit <<{ 
    println "MY_NAME[" + MY_NAME + "]"; 
    println "MY_COLOR[" + MY_COLOR + "]"; 
} 

gradle showit給出:

:showit 
MY_NAME[John Doe] 
MY_COLOR["blue"] 

我認爲,在一個gradle.properties定義的屬性項目根目錄下的文件會覆蓋build.gradle中定義的具有相同名稱的屬性s似乎並不是這種情況。它只填補了缺失的財產。

+0

嗨雷切爾。我看不到它回答了我的問題。你給出的例子顯示了一個局部變量,但我無法在構建腳本之外重寫它。 Ant任務鏈接用於替換文件中的值。如果我缺少一些東西,並且可以顯示如何從gradle.properties文件覆蓋build.gradle屬性,我很樂意接受它。 –

+0

哦,好吧,我以爲你有它的工作。沒關係:( –

回答

2

檢查項目是否有一個屬性,如果沒有,將其設置爲默認值:

ext { 
    if (!project.hasProperty('MY_NAME')) { 
     MY_NAME = 'John Doe' 
    } 
} 

參見:https://docs.gradle.org/current/userguide/build_environment.html#sub:checking_for_project_properties

如果你需要爲多個屬性做到這一點,你可以定義一個函數:

def setPropertyDefaultValueIfNotCustomized(propertyName, defaultValue) { 
    if (!project.hasProperty(propertyName)) { 
     ext[propertyName] = defaultValue 
    } 
} 

ext { 
    setPropertyDefaultValueIfNotCustomized('MY_NAME', 'John Doe') 
} 
+0

感謝Johan,這就是我所需要的。 ,函數調用周圍的外部{}不是必需的。 –

1

我想你可以定義一個局部變量,然後重寫它像這樣

def dest = "name" 

    task copy(type: Copy) { 
    from "source" 
    into name 
    } 

看到this文檔

+0

其他明智的,如果你使用的Apache你應該能夠發射一個螞蟻「替換」任務,你想做什麼: 見http://ant.apache.org/manual/Tasks/replace .html –

+0

謝謝,Rachel。我嘗試用gradle.properties文件中定義的值覆蓋'dest'變量,但它仍然使用構建腳本中定義的值 –