6 Stimmen

Kopieren einer Ant-Argumentliste in eine Eigenschaft

Gibt es in Ant eine Möglichkeit, so etwas zu tun:

<arguments id="arg-list">
    <arg value="arg1" />
    <arg value="arg2" />
</arguments>

<property name="prop1" refid="arg-list" />

Ich versuche, ein Makro für psexec zu schreiben, und ich suche nach einer guten Möglichkeit, die Argumentliste zu übergeben.

Ich weiß, dass man etwas Ähnliches mit Klassenpfaden machen kann...

Danke!

9voto

Richard A Punkte 2762

Ich kenne keine Antwort auf Ihre spezielle Frage. In der Dokumentation steht eindeutig, dass refid "nur für Verweise auf PATH-ähnliche Strukturen oder Eigenschaften sinnvolle Ergebnisse liefert".

Ohne weitere Informationen über Ihr Vorhaben ist es schwer, einen Kommentar abzugeben. Auf die Gefahr hin, Ihr Design zu ändern, anstatt Ihre Frage zu beantworten, schlage ich vor:

1) Sie können die Argumentliste als eine Zeile an exec übergeben:

<macrodef name="example">
  <attribute name="args"/>
  <sequential>
    <exec executable="example.exe">
      <arg value="somearg" />
      <arg line="@{args}"/>
    </exec>
  </sequential>
</macrodef>

<example args="somearg arg1 arg2"/>

Dadurch wird example.exe ausgeführt:

example.exe arg1 arg2

2) Ich gebe Argumente an Makros weiter, die externe Anwendungen wie diese aufrufen:

<macrodef name="example">
  <element name="params" optional="yes" implicit="yes"/>
  <sequential>
    <exec taskname="eg" executable="example.exe">
      <arg value="somearg" />
      <params />  
    </exec>  
  </sequential>
</macrodef>

<example>
  <arg value="arg1"/>
  <arg value="arg2"/>
</example>

Dadurch wird example.exe ausgeführt:

example.exe somearg arg1 arg2

Ich hoffe, ich habe meiner Großmutter hier nicht das Eierlutschen beigebracht.

0 Stimmen

Sollten die Elemente im <example>-Block nicht "args" (Plural, nicht Singular) heißen, wie die Elementparameter der MacroDef?

0 Stimmen

Ken, wenn Sie das zweite Beispiel meinen, dann nicht. Da args implizit ist, müssen Sie es nicht benennen. Alle Elemente, die Sie einfügen und die nicht explizit mit einem Element verbunden sind, werden als Teil von args angenommen. Ich werde die Lösung bearbeiten und andere Namen verwenden, um Verwirrung zu vermeiden.

0 Stimmen

Wow, eine Bearbeitung fünf Jahre später, bei der auch ein wirklich eklatanter Fehler entdeckt wurde, danke @ceving.

0voto

Jean-Rémy Revy Punkte 5469

Wussten Sie schon, dass Ant-Contrib Tasks For und ForEach : http://ant-contrib.sourceforge.net/tasks/tasks/for.html

Es gibt auch eine Suchaufgabe: <find ... delimiter=""/> ... </find> . Damit können Sie eine Liste erstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X