2010-12-09 2 views
7

Ich bin mir sicher, dass dies entweder zuvor gefragt wurde oder ziemlich einfach ist. Aber aus welchem ​​Grund auch immer, ich kann es scheinbar nicht funktionieren lassen. Ich möchte Ameise verwenden, um die ${build.classpath} (die eine Doppelpunkt getrennte Liste von Gläsern enthält) zu ${output.dir}/myapp/WEB-INF/lib zu kopieren.Ant copy classpath jars in ein Verzeichnis

Ich habe dieses Recht jetzt und es scheint nicht zu funktionieren:

<copy toDir="${output.dir}/myapp/WEB-INF/lib"> 
    <fileset file="${build.classpath}" /> 
</copy> 

Es behandelt den ganzen Classpath als eine Datei. Wie bekomme ich das zum Laufen?

Antwort

12

Die Ant-Handbuch auf der Kopieraufgabe die optimale Lösung für Ihr Problem enthält. Eines der Beispiel-Snippets, das es bereitstellt:

Sammeln Sie alle Elemente aus der aktuellen CLASSPATH-Einstellung in ein Zielverzeichnis und reduzieren Sie die Verzeichnisstruktur.

<copy todir="dest" flatten="true"> 
    <path> 
    <pathelement path="${java.class.path}"/> 
    </path> 
</copy> 
+1

Vielen Dank, ich muss das irgendwie übersehen haben. Das hat perfekt funktioniert. Es kopiert alles im 'Klassenpfad' in das Zielverzeichnis. Aber der 'classpath' kann Verzeichnisse oder Dateien enthalten, die keine jars sind. Wie schließe ich etwas aus, das NICHT eine jar-Datei ist? –

+0

Ersetzen Sie die Pfadverwendung durch . –

+1

Der wichtige Teil der Antwort ist die Option ** 'flatten =" wahr "' **. Wenn Sie nicht festlegen, werde ich nichts tun. – lucasvc

0

Ich denke, Sie sollten alle Doppelpunkt getrennte JAR-Dateien in einen Stammordner legen. Wenn dies nicht möglich ist, erstellen Sie eine separate Task, die diese JAR-Dateien in einen Ordner (möglicherweise temporär) schreibt. Und weisen Sie diesem Ordner ${build.classpath} zu. Verwenden Sie in Ihrer Kopierklausel <fileset dir="${build.classpath}"/>.

Ich hoffe, es sollte helfen.

1

Ich denke, some wie das funktionieren sollte:

<copy todir="${output.dir}/myapp/WEB-INF/lib" verbose="yes" flatten="yes" failonerror="no">  
    <fileset dir="${build.classpath}">  
     <include name="*.jar" />  
    </fileset>  
</copy> 

oder mit Wildcard in beinhalten: <include name="**/*.jar" />

+1

Sorry, das funktioniert überhaupt nicht. Der 'Klassenpfad' enthält eine durch Doppelpunkte getrennte Liste von Pfaden. Das einzige, was bisher für mich funktioniert hat, ist die Antwort von "user268396". –