Meine normale Regel ist nicht <ant>
oder <subant>
in einem normalen Build-Prozess zu verwenden, weil es die Abhängigkeitsprüfung bricht. Wir hatten einen Entwickler, der eine build.xml in sieben separate Build-Dateien aufteilte, und aufgrund des ständigen Aufrufs von <ant>
Aufgaben, die in anderen Build-Dateien erledigt wurden, führte er dasselbe Ziel bis zu 14 Mal aus. Und dann fragte er sich, warum sein Build so lange gedauert hatte. Das Zusammenfügen der sieben Build-Dateien zu einem einzigen build.xml
und das Verwenden des depends
-Parameters von <target>
verkürzte den Build auf weniger als zwei Minuten.
Was Sie jedoch in diesem Fall haben, sind wirklich zwei separate Projekte und ein build.xml
, die Sie verwenden, um diese zwei separaten Projekte aufzurufen. In diesem Fall verwenden Sie besser <ant>
und <subant>
Anrufe als <import>
.
- Diese Anrufe stören
${basedir}
nicht.
- Mit diesen Aufrufen können Sie angeben, welche Eigenschaften und Ressourcen in diese separaten Dateien eingeschlossen werden sollen. (Wahrscheinliche Antwort ist keine).
- Sie haben kein Problem mit mehreren Zielen, die denselben Namen haben. Ein kompilieren Ziel in Ihrem Client-Build wird das
_compile_
Ziel in Ihrem Server-Build nicht überlappen.
Subant ist leistungsfähiger, aber schwieriger zu implementieren. Mit Subant können Sie nach den build.xml-Dateien suchen lassen. Die meiste Zeit mit <ant>
ist einfach einfacher und macht was Sie wollen.
Was ich wirklich empfehlen würde ist Ivy verwenden, um die Abhängigkeitsprobleme zu behandeln. Ivy kann nicht nur die Serverabhängigkeit in Ihrem Client verarbeiten, sondern auch alle JAR-Abhängigkeiten von Drittanbietern. Kein Speichern von JAR-Dateien in Ihren Projekten mehr. Wenn Sie JAR-Dateien in einem Projekt speichern, verlieren Sie Informationen über ihre tatsächliche Version und ihren Verlauf. Sie sehen ein commons-io.jar
in Ihrem Projekt, und Sie haben keine Ahnung, welche Version es war oder ob es das offizielle `commons-io.jar ist, oder einer Ihrer Entwickler munged es als einen Punkt.
Das Problem ist, dass Ivy ein wenig Arbeit braucht, um zu implementieren. Sie müssen einen Ivy-Repository-Manager wie Nexus, Artifactory oder Archiva verwenden. (Eigentlich sind dies Maven-Repository-Manager, aber Ivy arbeitet sehr gut mit ihnen zusammen.)
Dann müssen Sie die ivy.jar
in Ihr Projekt importieren und die ivysettings.xml
Datei auf Ihren
Maven
Ivy-Repository-Server verweisen.
Wenn Sie Subversion als Versionskontrollsystem verwenden, können Sie folgendes tun:
- Neues Ivy Projekt, das die ivy.jar enthält, und eine XML-Datei, die alles für dich setzt. Ich habe eine in Github, die Sie anschauen können. Die XML-Datei heißt
ivy.tasks.xml
.
- Verwenden Sie dann in Ihrem Projekt
svn:externals
, um dieses Projekt zu importieren.
- In Ihrem
build.xml
, müssen Sie zwei Dinge tun:
- Fügen Sie den Ivy-Namespace in Ihrer
<project>
Einheit.
- Verwenden Sie die Aufgabe
<import>
, um die Ivy XML-Datei zu importieren, die alles eingerichtet hat.
Der Vorteil ist, dass Ihr Ivy Projekt ändern, werden automatisch alle Projekte ändern, die mit Ivy interagieren. Wenn Sie beispielsweise die URL des Ivy-Servers ändern oder die Ivy-Cache-Verzeichnisse neu definieren müssen.
One Sie das tun, Sie einfach eine ivy.xml
Datei erstellen, die Ihre Abhängigkeiten definiert, und verwenden Sie <ivy:cachepath>
und <ivy:retrieve>
die dritte Partei Gläser müssen Sie abzurufen. Dies würde den Server Jar enthalten, den Ihr Client benötigt.