2012-10-10 43 views
7

目前我知道我們可以使用org.apache.tools.ant.filters.ReplaceTokens在構建過程中用以下方式替換文件的內容。Gradle:通過從屬性文件中查找令牌來替換令牌

myBeans.xml:

<bean id="mybean1" class="com.test.MyClass1" > 
    <property name="myprop1" value="@[email protected]" /> 
</bean> 

my.properties:

myprop=testme 

gradle這個文件:

from file("myBeans.xml"), { 
    filter(ReplaceTokens, tokens: ["myproperty": project.properties["myprop"]]) 
} 

但是我想gradle這個從my.properties文件中找到的屬性名稱和將其替換爲xml文件(不提過濾器中的myprop)。如果沒有,我將不得不手動添加所有PlaceHolders

在此先感謝

回答

18

您可以將屬性作爲映射傳遞給ReplaceTokens配置。密鑰必須與您想要查看的令牌相符。例如:

的beans.xml:

<bean id="mybean1" class="com.test.MyClass1" > 
    <property name="myprop1" value="@[email protected]" /> 
</bean> 

my.properties:

myproperty=testme 

的build.gradle:

task myCopy(type:Copy){ 
    from "bean.xml" 
    into ("$buildDir/beans") 
    def myProps = new Properties() 
    file("my.properties").withInputStream{ 
     myProps.load(it); 
    } 
    filter(org.apache.tools.ant.filters.ReplaceTokens, tokens: myProps) 
} 

希望幫助。

歡呼聲, René

+1

現貨!非常感謝。 – Chris

+2

'import org.apache.tools.ant.filters.ReplaceTokens'是我的解決方案,謝謝! –

+0

使用這個,如果我們需要替換現有的build.xml本身,它將清空文件。任何方式來正確實現它?使用(到另一個文件夾),它正確地複製替換的內容。 – cypronmaya