2008-08-12 12 views
26

Ich habe ein Build-Skript und als Teil dieses Skripts kopiert es eine JAR-Datei in ein Verzeichnis, für die Leichtigkeit nennen wir es die utils jar. Das Utils-Jar wird von einem anderen Build-Skript erstellt, das in einem anderen Verzeichnis sitzt. Was ich versuche zu tun, habe mein Build-Skript das utils Build-Skript ausführen, so dass ich sicherstellen kann, dass das utils jar aktuell ist.Ant Build-Skripte, Antcall, Abhängigkeiten usw.

Also ich weiß, ich muss die utils Build-Datei importieren.

<import file="../utils/build/build.xml" /> 

Welche funktioniert nicht, weil die Importaufgabe, im Gegensatz zu fast allen anderen Ameise taks, nicht von basedir ausführen, wird es von der PWD. So umgehen, dass ich dieses kleine Liedchen haben, die erfolgreich die Build-Datei

<property name="baseDirUpOne" location=".." /> 
    <import file="${baseDirUpOne}/utils/build/build.xml" /> 

Also jetzt, dass ive meine Import Problem löste ich die Aufgabe aufrufen müssen nicht importiert werden, auch das sollte einfach richtig sein:

<antcall target="utils.package" /> 

zur Kenntnis, dass in den oben genannten, utils der Name ../utils/build/build.xml Projektes ist

das Problem, das ich jetzt in renne ist, dass ant Anruf nicht in ausführt. ./utils/build also was ich brauche und nicht finden kann, ist eine Runat Eigenschaft oder etwas ähnliches, im Wesentlichen:

<antcall target="utils.package" runat="../utils/build" /> 

Der Grund, warum ich diese brauchen, ist, dass der Schritt in meiner utils-Build-Datei in das Gefäß zu kopieren, die Code auszuwählen relative Pfade basiert, um hartzucodieren Pfade zu vermeiden in meiner Ameisenfeile. Irgendwelche Ideen?

Antwort

33

Ich habe etwas ähnliches eingerichtet: Ich habe eine Haupt-Ant build.xml, die eine separate build.xml aufruft, die kümmert sich um den Aufbau meiner Tests. Dies ist, wie ich es tun:

<target name="build-tests"> 
    <subant target="build"> 
     <fileset dir="${test.home}" includes="build.xml"/> 
    </subant> 
</target> 

Der Trick ist subant statt antcall zu verwenden. Sie müssen die andere Build-Datei nicht importieren.

+0

Was ist, wenn Sie den Klassenpfad im Subant-Ziel anpassen müssen? –

6

Verwenden Sie die "ant" task anstelle der "antcall" Aufgabe, die den importierten Build direkt ausführt, anstatt es in die aktuelle Builddatei zu importieren. Er hat einen "dir" -Parameter:

das Verzeichnis, das als basedir für das neue Ant-Projekt verwendet werden soll. Der Standardwert ist des aktuellen Projekts basedir, es sei denn, inheritall wurde auf false gesetzt, in , in diesem Fall hat es keinen Standardwert Wert. Dies überschreibt die Einstellung von basedir des aufgerufenen Projekts.

So könnten Sie tun:

<ant antfile="${baseDirUpOne}/utils/build/build.xml" dir="../utils/build" /> 

oder so ähnlich.

+2

Machen Sie das

0

Sie können Parameter an Antall übergeben, indem Sie im Antcall-Block verschachtelt werden. So können Sie die Eigenschaften auf diese Weise übergeben (wahrscheinlich sogar basedir, da Eigenschaften unveränderlich sind).