42 Stimmen

Wie verpackt man einen Ant-Build mit Maven?

Wir verwenden Maven für unser größeres Produkt. Alle unsere Artefakte werden mit dem Maven-Deploy-Ziel in ein gemeinsames Archiva-Repository deployt. Ich bin gerade dabei, ein Produkt eines Drittanbieters zu integrieren, das einen Ant-Build hat. Ich weiß, wie man Ant-Targets von Maven mit dem antrun-Plugin aufruft, aber ich bin mir nicht sicher, wie ich das Pom in diesem Fall einrichten soll. Ich möchte nicht, dass Maven tatsächlich ein Artefakt generiert, aber ich möchte, dass es das Artefakt abruft, das von Ant erstellt wurde, wenn das Maven-Deploy-Ziel ausgeführt wird.

Ich habe vor, die pom neben build.xml zu haben. Das Pom wird das antrun-Plugin im Paketziel verwenden, um das Ant-Ziel zum richtigen Zeitpunkt aufzurufen, um das .war-Artefakt zu erstellen.

Fragen:

a) Ich erstelle eine .war-Datei, aber sie wird mit Ant und nicht mit Maven erstellt, so dass es keinen Sinn macht, einen war-Paketierungstyp im pom zu haben. Was sollte mein Verpackungstyp sein?

b) Wie bringe ich Maven dazu, das Artefakt aus meinem Ant-Ausgabeverzeichnis für das Deploy-Ziel zu ziehen?

c) Wenn es keine guten Antworten auf A und B gibt, dann gibt es Ant Aufgaben, die die Maven-Deploy-Funktionalität für immer meine .war Artefakt in das gemeinsame Repository replizieren?

54voto

Rich Seller Punkte 81404

Sie können die maven-antrun-plugin um das Ant-Build aufzurufen. Verwenden Sie dann die build-helper-maven-plugin um das von ant erzeugte jar an das Projekt anzuhängen. Das angehängte Artefakt wird zusammen mit dem pom installiert/ausgeliefert.
Wenn Sie Ihr Projekt mit Paketierung angeben pom wird Maven nicht mit dem Ant-Build in Konflikt geraten.

Im folgenden Beispiel wird davon ausgegangen, dass sich die ant build.xml in src/main/ant befindet und ein compile Ziel, und Ausgabe an ant-output.jar .

<plugin>
  <artifactId>maven-antrun-plugin</artifactId>
  <executions>
    <execution>
      <phase>process-resources</phase>
      <configuration>
        <tasks>
          <ant antfile="src/main/ant/build.xml" target="compile"/>
        </tasks>
      </configuration>
      <goals>
        <goal>run</goal>
      </goals>
    </execution>
  </executions>
</plugin>
<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.3</version>
  <executions>
    <execution>
      <id>add-jar</id>
      <phase>package</phase>
      <goals>
        <goal>attach-artifact</goal>
      </goals>
      <configuration>
        <artifacts>
          <artifact>
            <file>${project.build.directory}/ant-output.jar</file>
            <type>jar</type>
          </artifact>
        </artifacts>
      </configuration>
    </execution>
  </executions>
</plugin>

0 Stimmen

Sehr hilfreiche Antwort Rich, sobald ich es in meinem Projekt zum Laufen gebracht habe, werde ich Ihre Antwort akzeptieren.

0 Stimmen

Ein guter Rat. Leider funktioniert er nicht für WAR-Dateien - das Maven War Plugin scheint sich nicht um die angehängten WAR-Artefakte zu kümmern.

1 Stimmen

P.S. Verzeihen Sie mir, es funktioniert tatsächlich gut, sobald ich die Paketierungsspezifikation in <packaging>pom</packaging> ändere - die angehängte WAR stört nicht mehr die generierte WAR und wird daher ordnungsgemäß in das Repo aufgenommen.

3voto

sal Punkte 22948

Sie können ein ANT-Projekt mit Maven verpacken, indem Sie mehrere Ameisenlaufziele wie ich in einer anderen Frage schrieb. Angenommen, Ihr bestehendes Ant-Projekt hat Clean- und Build-Tasks, könnte dies ein nützlicher Weg sein, das Projekt so zu verpacken, dass Sie Maven Goals verwenden können und es auf bestehenden Ant-Code abbilden können.

0 Stimmen

Danke Sal, gute Antwort. Sie geht zwar nicht ganz auf meine oben genannten Punkte a, b und c ein, ist aber trotzdem hilfreich.

1voto

Peter Thomas Punkte 46575

Siehe dies: Warum Sie die Maven Ant Tasks anstelle von Maven oder Ivy verwenden sollten

Und wie man ein Maven Goal von Ant aus aufruft, kann man in diesem Beispiel nachlesen:

http://code.google.com/p/perfbench/source/browse/trunk/perfbench/grails-gorm/build.xml

Mit den oben genannten Informationen sollten Sie in der Lage sein, das zu erreichen, was Sie brauchen. Lassen Sie mich wissen, wenn Sie irgendwelche Fragen haben.

1voto

keats Punkte 13
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-install-plugin</artifactId>
    <version>2.3.1</version>
    <executions>
        <execution>
            <id>install-library</id>
            <phase>install</phase>
            <goals>
                <goal>install-file</goal>
            </goals>
            <configuration>
                <groupId>x.x</groupId>
                <artifactId>ant-out-atifacts</artifactId>
                <version>${project.version}</version>
                <file>ant-output.jar</file>
                <packaging>zip</packaging>
            </configuration>
        </execution>
    </executions>
</plugin>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X