Frage

Wir haben ein Apache ANT-Skript, um unsere Anwendung zu erstellen und dann die resultierende JAR-Datei in die Versionskontrolle (in diesem Fall VSS) einzuchecken.Jetzt haben wir jedoch eine Änderung, die erfordert, dass wir zwei JAR-Dateien für dieses Projekt erstellen und dann beide in VSS einchecken.

Das aktuelle Ziel, das die ursprüngliche JAR-Datei in VSS eincheckt, erkennt den Namen der JAR-Datei über eine Eigenschaft.Gibt es eine einfache Möglichkeit, dieses Ziel zu „generalisieren“, sodass ich es zum Einchecken einer JAR-Datei mit einem beliebigen Namen wiederverwenden kann?In einer normalen Sprache würde dies natürlich einen Funktionsparameter erfordern, aber meines Wissens gibt es in ANT wirklich kein entsprechendes Konzept.

War es hilfreich?

Lösung

Ich würde vorschlagen, mit zu arbeiten Makros gegenüber subant/antcall, weil der Hauptvorteil, den ich bei Makros gefunden habe, darin besteht, dass Sie die vollständige Kontrolle über die Eigenschaften haben, die an das Makro übergeben werden (insbesondere, wenn Sie neue Eigenschaften hinzufügen möchten).

Sie überarbeiten einfach Ihr Ant-Skript, beginnend mit Ihrem Ziel:

<target name="vss.check">
    <vssadd localpath="D:\build\build.00012.zip" 
        comment="Added by automatic build"/>
</target>

Erstellen eines Makros (beachten Sie das Kopieren/Einfügen und Ersetzen durch die @{Datei}):

<macrodef name="private-vssadd">
    <attribute name="file"/>
    <sequential>
        <vssadd localpath="@{file}" 
            comment="Added by automatic build"/>
    </sequential>
</macrodef>

und rufen Sie die Makros mit Ihren Dateien auf:

<target name="vss.check">
    <private-vssadd file="D:\build\File1.zip"/>
    <private-vssadd file="D:\build\File2.zip"/>
</target>

Refactoring „auf die Art der Ameise“

Andere Tipps

Es wird im Allgemeinen als schlechte Idee angesehen, die Versionskontrolle Ihrer Binärdateien durchzuführen, und ich empfehle dies nicht.Aber wenn es unbedingt sein muss, können Sie antcall in Kombination mit param verwenden, um Parameter zu übergeben und ein Ziel aufzurufen.

<antcall target="reusable">
    <param name="some.variable" value="var1"/>
</antcall>

<target name="reusable">
    <!-- Do something with ${some.variable} -->
</target>

Weitere Informationen finden Sie hier Antcall-Aufgabe hier.

Schauen Sie sich Ant an Makros.Sie ermöglichen es Ihnen, wiederverwendbare „Routinen“ für Ant-Builds zu definieren.Ein Beispiel finden Sie hier Hier (Punkt 15).

Schauen Sie sich auch die Subant-Aufgabe an, mit der Sie dasselbe Ziel für mehrere Build-Dateien aufrufen können:

<project name="subant" default="subant1">
    <property name="build.dir" value="subant.build"/>
    <target name="subant1">
        <subant target="">
            <property name="build.dir" value="subant1.build"/>
            <property name="not.overloaded" value="not.overloaded"/>
            <fileset dir="." includes="*/build.xml"/>
        </subant>
    </target>
</project>

Sie können verwenden Gant um Ihren Build zu skripten groovig Machen Sie, was Sie wollen, oder schauen Sie sich das an groovige Ameisenaufgabe.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top