2017-03-02 63 views
0

我想模板各種XML文件。我想要做的是能夠通過包含幾個Child XML文件來構建一個Parent XML。在Gradle的展開/複製過程中,我可以將輔助文件包含到文件中嗎?

搖籃:

processResources { 
    exclude '**/somedir/*' 
    propList.DESCRIPTION = 'a description goes here' 
    expand(propList) 
} 

Parent.XML:

<xml> 
    <line1>something</line1> 
    <%include file="Child.XML" %> 
</xml> 

文檔使用SimpleTemplateEngine

作爲一個例子>拷貝() - 這應該展開()過程中發生指出SimpleTemplateEngine使用JSP <%語法和<%=表達式,但不一定提供支持函數的列表。

包含失敗,它不是一個有效的方法在生成SimpleTemplateScript,也許我的意思是eval?

我來得到的東西的工作最接近的是:

<xml> 
    <line1>something</line1> 
    <% evaluate(new File("Child.xml")) %> 
</xml> 

這導致Child.xml的404,因爲它是在看的過程中工作目錄,而不是父文件。如果我將它引用爲「build/resources/main/templates ..../Child.xml」,那麼我會從解析Child中得到'意外的令牌:< @ line ....'錯誤。

可以這樣做嗎?我是否需要更改模板引擎,如果這甚至可能?理想情況下,它也應該處理Child中的任何令牌。

這在JSP中非常簡單。我以某種方式得到了印象,我可以像處理GSP一樣處理這些文件,但我不確定如何正確使用GSP標記,如果這是真的。

任何幫助,一如既往,非常感謝。

謝謝。

回答

1

This documentation沒有提到JSP。 SimpleTemplateEngine的語法是${}

使用搖籃3.4-RC2,如果我有這個build.gradle文件:

task go(type: ProcessResources) { 
    from('in') { 
     include 'root.xml' 
    } 

    into 'out' 

    def props = [:] 
    props."DESCRIPTION" = "description" 
    expand(props) 
} 

其中in/root.xml是:

<doc> 
    <name>root</name> 
    <desc>${DESCRIPTION}</desc> 

${new File("in/childA.xml").getText()} 
</doc> 

in/childA.xml是:

<child> 
    <name>A</name> 
</child> 

然後輸出:

<doc> 
    <name>root</name> 
    <desc>description</desc> 

<child> 
    <name>A</name> 
</child> 

</doc> 
+0

只是$ {.... getText()}解決了我的問題。同樣,Child中的任何令牌也都被擴展了。謝謝你。如果任何人有關於如何使用相對引用(對於Parent)的建議,而不是完整的路徑,我很樂意聽到它。 IRT對我關於JSP的評論來自AbstractCopy:「在複製每個文件時擴展屬性引用,更具體地說,每個文件都使用Groovy的SimpleTemplateEngine進行轉換」。STE的文檔說「模板引擎使用JSP風格<% %>腳本和<%= %>表達式語法或GString風格表達式」。 –

+0

如果我沒有正確地將您的答案標記爲已接受的答案,或者我忽略了其他禮儀步驟,請告訴我。再次感謝你。 –

相關問題