2011-01-11 14 views
6

Am Ende meiner Ant Build-ID zu installieren, wie es das Äquivalent der Kommandozeilenaufruf rufenMit Maven Ant-Task jar zu lokalen Repository

mvn install:install-file -Dfile=my.jar -DgroupId=com.company.project -DartifactId=my_project -Dversion=1.0 -Dpackaging=jar -DgeneratePom=true 

so, dass sie die neu gebaute Glas zu einem hinzufügen wird maven repository, auf das sich ein anderes Projekt stützen wird.

Ive versucht, die maven-ant-task verwenden und das Maven-ant-Task-Glas zur Ameise gebaut Projekt und den folgenden Code in die build.xml hinzugefügt:

<target name ="minstall" depends="jar"> 
    <artifact:pom id="maven_install" file="maven_install.xml" /> 
    <artifact:install file="${out.dir}/my_project.jar"> 
     <pom refid="maven_install"/> 
    </artifact:install> 
</target> 

aber scheint zu fehlen, etwas wie es Gewohnheit arbeite für mich. Zunächst i den Fehler in der build.xml (Ant-Build-Datei) erhalten sagen

Das Präfix „Artefakt“ für das Element „Artefakt: pom“ ist nicht gebunden.

Was mache ich falsch? Ich bin ziemlich neu in der Ameise?

Bei einer realted Frage, was ist der Zweck der zugehörigen POM-Datei? Ich würde normalerweise kein POM in diesem Projekt haben, da es eine Ameise ist

Antwort

-2

Ich denke, dass es keinen Sinn macht, solche Befehle in Ant build.xml zu setzen. Wenn Sie Ihre JAR-Datei in Ihrem maven-Repository installieren möchten, verwenden Sie einfach den Befehl mvn install.

Abgesehen davon, denke ich, dass Sie irgendwie den Zweck von Maven und Ant-Tools in Ihrem Projekt verwirren. Was ich vorschlagen würde ist Maven als Hauptwerkzeug zu verwenden. Sie können das Aufrufen von Ant-Zielen in Ihrer POM-Datei konfigurieren, wenn Sie dies wirklich benötigen. Persönlich denke ich, dass es die beste Lösung ist, um Ant von Maven anzurufen. Maven-Ziele (wie clean, test, package, install usw.) sind sehr einfach zu bedienen und leistungsfähig (ich denke, dass Sie es in jedem Maven-Tutorial lesen können).

+4

Baran. Vielleicht benutzt sein Projekt eine Ameise und ein anderes Projekt benutzt Maven. – Raghuram

+0

das ist richtig Raghuram Ich habe eine Reihe von neuen Projekten mit Maven und eine Reihe von alten Legacy-Projekten mit Ameisen. Bei diesen älteren Projekten müssen die JAR-Dateien nach jedem Build zum lokalen maven-Repo hinzugefügt werden. Ich habe versucht, eine Ameise build.xml von Maven genannt zu haben, aber das hat nicht zuverlässig funktioniert. Während es die ant build.xml erfolgreich aufgerufen hat, hat es während des Ameisenbaus schnell Ausnahmen ausgelöst (ant build funktioniert gut durch ant alleine). Es sieht so aus, als wäre die Ameise Call Ameise anders als die Ameise alleine genannt zu haben. Einige Eigenschaften werden von der Maven-Instanz übergeben, nach der ich nicht gefragt habe. –

+0

Obwohl id immer noch das Problem lösen möchte, habe ich mich erst einmal darum gekümmert, indem ich mit dem Befehl exec ein Batch-Skript aus der ant-Build-Datei aufgerufen habe. Dieses Skript ruft den Befehl mvn install zum Installieren von JAR-Dateien im lokalen Repo auf. –

3

Vielleicht maven-ant-task Glas ist nicht installiert, d.h. nicht in Ihrer Ameise CLASSPATH. Sie können dazu this instruction folgen.

+0

Ich habe die Maven-Ant-Task-JAR-Datei zu "ant lib dir" hinzugefügt, das Verzeichnis in den Windows-Klassenpfad eingefügt und außerdem den Code (http://maven.apache.org/ant-tasks/installation.html) zu einem lokalen Pom hinzugefügt Datei gemäß Anweisungen. Immer noch keine Freude –

+0

Können Sie überprüfen, ob Ihre build.xml hat den XML-Namespace Raghuram

+0

Raghuram hat Recht dies ist mit Maven-Ant verwandt -Aufgabe. Siehe http://stackoverflow.com/questions/1490914/how-to-get-project-version-from-mavensss-pom-in-ant –

1

Diese Nachricht bedeutet, dass Sie ein xmlns: Artefakt-Attribut in Ihrem build.xml fehlt. Sehen Sie sich zum Beispiel die installation page in der Dokumentation an.

In Bezug auf den Zweck der POM-Datei sind es hauptsächlich Metadaten, so dass Maven Abhängigkeiten richtig herausfinden kann. In einem echten Maven Build beschreibt es auch, wie man baut, testet und verpackt. Aber in deinem Fall wird das alles von Ameisen getan.

3

Wie bereits erwähnt, müssen Sie sicherstellen, dass die Aufgaben in Ihrem ant-Skript definiert sind und der Artefaktnamespace verstanden wird.

Die POM-Datei wird verwendet (in diesem Fall), um den Maven-Repositorys die Abhängigkeiten der JAR mitzuteilen, die Sie in das Repository einfügen. Das POM sollte auch die Identifikationsinformationen der JAR angeben (groupId, artifactId, Versionsnummer, Lizenz usw.).

Streng genommen, Sie benötigen keinen externen POM benötigen, können Sie die Informationen in Ihrer Datei build.xml wie folgt definieren:

<!-- Assuming tasks defined, and 'artifact' namespace exists --> 
<artifact:pom id="maven_install" groupId="com.whatever" artifactId="some-jar" 
       version="1.0" packaging="jar"> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <dependency groupId="..." artifactId="..." version="..."/> 
    <license name="apache" url="http://www.apache.org"/> <!-- can be omitted --> 
</artifact:pom> 

<target name ="minstall" depends="jar"> 
    <artifact:install file="${out.dir}/my_project.jar" pomRefId="maven_install"/> 
</target> 

Wenn Sie die JAR in der ‚minstall‘ Aufgabe installieren, das POM sollte mit den entsprechenden Abhängigkeiten im lokalen Repository generiert werden.

+4

Es gibt derzeit einen Fehler in der oben genannten Installationsaufgabe, wenn Sie ein In-Memory-POM verwenden Datei. Das Artefakt wird als "Super-Pom" installiert, nicht als die von Ihnen angegebene Artefakt-ID. Die Maven-Entwickler arbeiten daran. (Erwähnte in Frage http://stackoverflow.com/questions/4887018/artifatiminstall-pushes-the-super-pom-ad-the-pom-i-define) – GKelly

Verwandte Themen