2009-09-21 10 views
38

Używamy maven do naszego dużego produktu. Wszystkie nasze artefakty są wdrażane we współużytkowanym repozytorium archiva przy użyciu celu maven deploy. Obecnie integruję produkt innej firmy, który ma budowę ant. Wiem, jak wywoływać cele ant od maven'a za pomocą wtyczki antrun, ale nie jestem pewien, jak skonfigurować pom w tym przypadku. Nie chcę, żeby maven rzeczywiście generował artefakt, ale chcę, żeby ściągnął artefakt zbudowany przez mrówkę, gdy cel maven wdrożyć.Jak owinąć kompilację Anta w Mavena?

Mam zamiar mieć pom przy build.xml. Pom użyje wtyczki antrun w celu pakietu, aby wywołać cel mrówki w odpowiednim czasie, aby zbudować artefakt .war.

Pytania:

a) tworzę plik .war ale jest tworzone przez mrówki, nie Maven, więc o przedwojenna opakowaniowego w pom nie ma sensu. Jaki powinien być mój typ opakowania?

b) W jaki sposób spowodować, że maven pobierze artefakt z katalogu wyjściowego mrówki dla celu wdrożenia?

c) Jeśli nie ma dobrych odpowiedzi na A i B, to czy istnieją zadania ant, które replikują funkcję rozmieszczania maven w celu przeniesienia artefaktu .war do współużytkowanego repozytorium?

Odpowiedz

51

Możesz użyć maven-antrun-plugin, aby wywołać kompilację mrówki. Następnie użyj build-helper-maven-plugin, aby dołączyć słoik wyprodukowany przez mrówkę do projektu. Dołączony artefakt zostanie zainstalowany/rozłożony wraz z pom.
Jeśli określisz swój projekt z opakowaniem pom, Maven nie będzie kolidować z kompilacją mrówki.

W poniższym przykładzie zakłada się, że mrówka build.xml znajduje się w src/main/ant, ma cel compile, a wyjście do 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

Bardzo pomocna odpowiedź Bogata, gdy tylko dostanę pracę w moim projekcie, przyjmuję twoją odpowiedź. – digitaljoel

+0

Świetna rada. Niestety nie działa to w przypadku plików WAR - wtyczka maven war nie wydaje się dbać o załączone artefakty WAR. – mvmn

+0

P.S. Wybaczcie mi, to działa dobrze, kiedy zmienię specyfikację opakowania na pom - dołączona WOJNA nie zakłóca już generowanej WAR, a zatem kończy się dodana w repo prawidłowo. – mvmn

3

Rzeczywiście można owinąć projekt Ant z Maven za pomocą multiple ant run goals jak pisałem w innym pytaniu. Zakładając, że twój istniejący projekt mrówki ma czyste i budowane zadania, może to być użyteczny sposób owijania projektu, dzięki czemu możesz używać celów maven i mapować go do istniejącego kodu mrówkowego.

+0

Dzięki Sal, dobra odpowiedź. Nie odnosi się do moich a, b, cw powyższym przykładzie, ale i tak jest pomocny. – digitaljoel

1
<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>