2008-09-17 5 views
19

Ich habe ein Ant-Skript, das einen Kopiervorgang unter Verwendung der 'copy' task ausführt. Es wurde für Windows geschrieben und hat einen hartkodierten C: \ Pfad als 'todir' Argument. Ich sehe, dass die 'exec' Aufgabe ein Betriebssystem-Argument hat, gibt es eine ähnliche Möglichkeit, eine Kopie basierend auf OS zu verzweigen?Kann ich die Ant-Copy-Task OS-spezifisch machen?

Antwort

31

Ich würde empfehlen, den Pfad in eine Eigenschaft zu setzen und dann die Eigenschaft bedingt auf dem aktuellen Betriebssystem zu setzen.

Als Nebeneffekt können Sie die Eigenschaft überschreiben, ohne das Ant-Skript zu bearbeiten.

+0

Gibt es keine Möglichkeit, einen Pfad in Ant zu deklarieren, der unter Windows und Linux gleich behandelt wird? Ich bin nur Neugierig. –

1

Sie können keine Variable verwenden und sie je nach Typ zuweisen? Sie könnten es in eine build.properties Datei einfügen. Oder Sie können es mit einem zuweisen.

2

Sie könnten den Zustand Aufgabe verwenden, um verschiedene Kopieraufgaben zu verzweigen ... von der Ameise Handbuch:

<condition property="isMacOsButNotMacOsX"> 
<and> 
    <os family="mac"/> 

    <not> 
    <os family="unix"/> 

    </not> 
</and> 

1

Deklarieren Sie eine Variable, die den Stammordner Ihrer Betrieb ist. Präfix Ihre Ordner mit dieser Variable, einschließlich in der Kopieraufgabe.

Setzen Sie die Variable basierend auf dem Betriebssystem mit einer Bedingung oder übergeben Sie sie als Argument an das Ant-Skript.

6

Die zuvor geposteten Vorschläge für eine OS-spezifische Variable funktionieren, aber oft können Sie einfach das Präfix "C:" weglassen und Forward Slashes (Unix-Stil) Dateipfade verwenden und es wird auf Windows- und Unix-Systemen funktionieren.

Also, wenn Sie Dateien kopieren möchten "C:/tmp" unter Windows und "/ tmp" auf Unix, Sie so etwas wie verwenden:

<copy todir="/tmp" overwrite="true" > 
     <fileset dir="${lib.dir}"> 
      <include name="*.jar" /> 
     </fileset> 
</copy> 

Wenn Sie nicht wollen/müssen eingestellt

<condition property="root.drive" value="C:/" else="/"> 
     <os family="windows" /> 
    </condition> 
    <copy todir="${root.drive}tmp" overwrite="true" > 
      <fileset dir="${lib.dir}"> 
       <include name="*.jar" /> 
      </fileset> 
    </copy> 
0

Ant-contrib die < osfamily/> Aufgabe hat: ein bedingter Pfad basierend auf O, kann es als vereinfacht werden. Dadurch wird die Familie des Betriebssystems einer Eigenschaft (die Sie den Namen angeben) ausgesetzt. Dies könnte von Vorteil sein.

Verwandte Themen