2009-03-03 8 views
19

Ich habe eine Dateigruppe (die von der Maven Ant-Aufgabe zurückgegeben wird), und sie enthält alle Gläser, die ich neu packen muss. Diese Dateigruppe wird von einer refid referenziert. Ich möchte nur unsere eigenen Gläser mit einschließen, also möchte ich das filtern. Ant-Dateigruppen unterstützen jedoch keine weiteren Attribute oder geschachtelte Tags, wenn eine Zurückweisungsdatei verwendet wird.Filtere eine Dateigruppe, auf die mit einer refid verwiesen wird

Zum Beispiel, wenn die Dateigruppe ist:

org.foo.1.jar 
org.foo.2.jar 
log4j.jar 

und ich möchte eine fileset haben, die

org.foo*.jar 

nur

enthält Wie würde ich das tun?

Antwort

27

Verwenden Sie eine Ressourcen-Sammlung restrict, die Sie wie eine fileset in jeder Aufgabe verwenden können, die Ressourcenauflistungen verwendet, um die Gruppen von Dateien auszuwählen, die bearbeitet werden sollen.

Zum Beispiel für eine fileset von Ihrem Maven Aufgabe über eine ID verwiesen zurück genannt dependency.fileset können Sie eine restrict Ressourcensammlung erklären, wie so:

<restrict id="filtered.dependencies"> 
    <fileset refid="dependency.fileset"/> 
    <rsel:name name="org.foo*.jar"/> 
</restrict> 

Hinweis Sie werden die Ressourcenauswahlnamespace deklarieren müssen als es ist nicht Teil des integrierten in Ant-Namespace:

<project xmlns:rsel="antlib:org.apache.tools.ant.types.resources.selectors"> 
    ... 
</project> 

von hier können Sie Ihre restrict Ressourcensammlung in ähnlicher Weise verweisen kann, wie Sie Ihre 01 verweisen würden. Zum Beispiel Backups Ihrer gefilterten Satz von Dateien zu erstellen:

<copy todir="."> 
    <restrict refid="filtered.dependencies"/> 
    <globmapper from="*" to="*.bak"/> 
</copy> 

Natürlich können Sie Ihre restrict Ressourcensammlung INLINE können, wenn Sie dies wünschen:

<copy todir="."> 
    <restrict> 
     <fileset refid="dependency.fileset"/> 
     <rsel:name name="org.foo*.jar"/> 
    </restrict> 
    <globmapper from="*" to="*.bak"/> 
</copy> 

einen Blick auf die Ant-Dokumentation haben auf resource collections Für weitere Informationen.

+2

Gute Beispiele für die Verwendung von Ressourcen. Ich denke, dass die Beispiele in den Ant-Dokumenten verbessert werden könnten, also ist dies sehr hilfreich. – Trenton

+0

Simon, GROSSER DANK! – t0r0X

1

Ich denke, dass Sie eine Ameisenaufgabe dafür schreiben müssen. Sie sind aber ziemlich einfach zu schreiben.

Siehe http://ant.apache.org/manual/develop.html#writingowntask

In Ihrer Aufgabe, müssen Sie getProject() und bitten, es rufen Sie die Dateigruppe zu geben, gehen durch, und erstellen Sie eine neue.

1

Wenn Sie eine ausreichend aktuelle Version von Ant und JDK verwenden, zum Beispiel Ant 1.7 und JDK 6, dann können Sie die optional script task verwenden, um zu tun, was Sie wollen. (Frühere Versionen funktionieren möglicherweise ebenfalls.) Bei der Seite, mit der ich verlinkt habe, sehen Sie ein Beispielskript, das eine Dateigruppe erstellt, wenn Sie zum Text "Das Ziel besteht die Liste der Dateigrößen" scrollen.

Dies ist nichts für schwache Nerven, und eine benutzerdefinierte Ameisenaufgabe, die Sie selbst schreiben, wird wahrscheinlich flexibler sein. Aber ich wollte auf die Option hinweisen.

1

Ich benutze Ant mit Ivy. Mit Hilfe von Ivy ist es möglich, Abhängigkeiten für den Abruf zu filtern, mit dem folgenden Code in ivy.xml:

<dependency name="Project1" rev="latest.integration" transitive="true" conf="modlibs"> 
<exclude name="${exclusionRegEx}" matcher="regexp" /> 
</dependency> 
<dependency name="Project2" rev="latest.integration" transitive="false" conf="modules"/> 

Vielleicht ein kurzer Blick auf die Ivy Quelle ‚helfen werde?

Verwandte Themen