2017-03-02 1 views
0

Ich versuche, verschiedene XML-Dateien zu erstellen. Was ich tun möchte, ist in der Lage, ein Eltern-XML aufzubauen, indem Sie mehrere Kind-XML-Dateien einschließen. Dies sollte während der expand() geschehen -> copy()Wie kann ich beim Erweitern/Kopieren von Gradle sekundäre Dateien in eine Datei einschließen?

als Beispiel die SimpleTemplateEngine mit:

Gradle:

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

Parent.XML:

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

Die Dokumentation gibt an, dass SimpleTemplateEngine JSP <% Syntax und <% = Ausdrücke verwendet, aber nicht unbedingt eine Liste der unterstützten Funktionen enthält.

Include schlägt fehl, da es keine gültige Methode für das resultierende SimpleTemplateScript ist, vielleicht meinte ich eval?

Die nächstgelegene ich immer etwas gekommen ist zu arbeiten:

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

Das ergibt 404 des Child.xml, wie es bei dem Prozess Arbeitsverzeichnis sucht, anstatt dass die übergeordnete Datei. Wenn ich es als "build/resources/main/templates ..../Child.xml" referenziere, bekomme ich 'unerwartete Token: < @ line ....' Fehler beim Parsing des Childs.

Kann dies getan werden? Muss ich Template-Engines ändern, wenn das überhaupt möglich ist? Idealerweise sollte es auch alle Tokens in Child verarbeiten.

Dies ist alles sehr einfach in JSP. Ich habe irgendwie den Eindruck, dass ich diese Dateien wie GSP behandeln kann, aber ich bin mir nicht sicher, wie ich die GSP-Tags richtig nutzen soll, wenn das überhaupt stimmt.

Jede Hilfe, wie immer, wird sehr geschätzt.

Vielen Dank.

Antwort

1

This documentation erwähnt JSP nicht. Die Syntax für die SimpleTemplateEngine ist ${}.

Mit Gradle 3.4-RC2, wenn ich diese build.gradle Datei:

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

    into 'out' 

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

wo in/root.xml ist:

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

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

und in/childA.xml ist:

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

dann ist der Ausgang :

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

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

</doc> 
+0

nur die $ {.... getText()} allein löste mein Problem. Außerdem wurden alle Token in Child erweitert. Danke für das. Wenn jemand einen Vorschlag hat, wie man einen relativen Verweis (auf Eltern) statt auf den vollständigen Pfad verwendet, würde ich es gerne hören. IRT zu meinem Kommentar über JSP stammt von AbstractCopy: "Erweitert die Eigenschaftsreferenzen in jeder Datei beim Kopieren. Genauer gesagt wird jede Datei mit Groovys SimpleTemplateEngine transformiert".Die Dokumentation für STE sagt "Die Vorlagen-Engine verwendet JSP-Format <% %> Skript und <%= %> Ausdruck Syntax oder GString Stil Ausdrücke.". –

+0

Wenn ich Ihre Antwort nicht richtig als akzeptiert markiert habe, oder wenn ich andere Etikette-Schritte weggelassen habe, lassen Sie es mich wissen. Und danke nochmal. –

Verwandte Themen