Wir haben eine Reihe von Ant-Skripten, eines für jedes unserer Teilprojekte. Am Ende möchten wir alle diese von einem Master-Build-Skript ausführen und eine andere Hausreinigung durchführen, um das gesamte Projekt zu paketieren. Jedes einzelne Ant-Skript heißt ant.xml
und befindet sich im Unterverzeichnis seines Projekts. Jeder verwendet eine Ant import
, um eine ant-commons.xml
zu importieren, und überschreibt dann einige der spezifischen Ziele dort.Warum funktioniert meine Ant-Master-Build-Datei nicht ordnungsgemäß?
Zum Beispiel eines der Projekte überschreibt das compile
Ziel, die classpath
entsprechend eingestellt wird, und die source
und target
-1,5 einzustellen (die Ameise-Commons nutzt 1.4)
Jetzt, in der Theorie, das alles klingt einfach. Hier ist der Master Build-Skript:
<project name="Retain" basedir="." default="main">
<target name="main">
<ant dir="SharedJava" antfile="ant.xml" target="clean"/>
<ant dir="SharedJava" antfile="ant.xml" target="copy_current"/>
<ant dir="GWEasySoap" antfile="ant.xml" target="clean"/>
<ant dir="GWEasySoap" antfile="ant.xml" target="copy_current"/>
<ant dir="RetainLib" antfile="ant.xml" target="clean"/>
<ant dir="RetainLib" antfile="ant.xml" inheritAll="false" target="copy_current"/>
<ant dir="RetainIndex" antfile="ant.xml" target="clean"/>
<ant dir="RetainIndex" antfile="ant.xml" target="copy_current"/>
<ant dir="RetainPersist" antfile="ant.xml" target="clean"/>
<ant dir="RetainPersist" antfile="ant.xml" target="copy_current"/>
</target>
</project>
Was tatsächlich passiert:
Die ersten Teilprojekte gut laufen. RetainLib
, die in der Tat einen Verweis auf die SharedJava
's Glas haben muss, dann scheitert, jammern darüber, wie es nicht finden kann. Als ich RetainLib
, RetainIndex
löste, scheiterte, wie man Generika in einer 1.4 Zieldatei nicht verwenden sollte.
Nachdem ich herumgespielt habe, habe ich ganz einfach festgestellt, dass diese darauf bestanden, das kompilierte Ziel innerhalb von ant-commons
anstelle des überschriebenen zu laufen.
Warum? Wie kann ich das umgehen? (Elegant, ich meine - offensichtlich konnte ich die Verwendung von Ant-Commons insgesamt entfernen und ich wette Dinge würden funktionieren.)
Nein. Es tut uns leid. Dein Rat ist genau falsch, zumindest vom Ergebnis. 1. Mit dir removed und inheritFalse schlägt der Build sofort fehl, da das aufgerufene ant.xml-Skript jetzt in seinem Verzeichnis verwechselt wird. 2.Mit dir wiederhergestellt zu seinem glorreichen und rechtmäßigen Platz :) und inheritFalse, scheitert der Build, genau wie beschrieben. –