2012-10-10 14 views
7

Hiện tại tôi hiểu rằng chúng tôi có thể sử dụng org.apache.tools.ant.filters.ReplaceTokens để thay thế nội dung của tệp trong khi xây dựng theo cách sau.Gradle: Thay thế Tokens bằng cách tìm mã thông báo từ tập tin bất động sản

myBeans.xml:

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

my.properties:

myprop=testme 

tập tin gradle:

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

Tuy nhiên tôi muốn gradle để tìm các tên thuộc tính từ tập tin và my.properties thay thế nó trong tệp xml (không đề cập đến myprop trong bộ lọc). Nếu không, tôi sẽ phải thêm tất cả PlaceHolders theo cách thủ công.

Cảm ơn trước

Trả lời

18

bạn có thể chuyển các thuộc tính dưới dạng bản đồ đến cấu hình ReplaceTokens. Khóa phải khớp với mã thông báo bạn muốn xem thay thế. Ví dụ:

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

hy vọng rằng giúp đỡ.

cổ vũ, René

+1

Spot on !! Cảm ơn bạn rất nhiều. – Chris

+2

'import org.apache.tools.ant.filters.ReplaceTokens' là giải pháp cho tôi, cảm ơn! –

+0

Sử dụng điều này, nếu chúng ta cần thay thế bản build.xml sẵn có, nó sẽ làm rỗng tệp. Bất kỳ cách nào để đạt được nó đúng cách? Sử dụng vào (vào một thư mục khác), nó được sao chép đúng cách với nội dung được thay thế. – cypronmaya