2009-09-21 14 views
38

Utilizziamo Maven per il nostro prodotto di grandi dimensioni. Tutti i nostri artefatti vengono distribuiti in un archivio di archiviazione condiviso utilizzando l'obiettivo di distribuzione di Maven. Ora sto integrando un prodotto di terze parti con una build di formiche. So come chiamare i bersagli delle formiche da parte di Maven usando il plugin antrun, ma non sono sicuro di come configurare il pom in questa istanza. Non voglio che Maven generi effettivamente un artefatto, ma voglio che estragga l'artefatto che è stato costruito dalla formica quando viene eseguito l'obiettivo di distribuzione di Maven.Come avvolgere una build Ant con Maven?

Sto pianificando di avere il pom adiacente a build.xml. Il pom utilizzerà il plugin antrun nell'obiettivo del pacchetto per richiamare il bersaglio della formica al momento opportuno per costruire l'artefatto .war.

Domande:

a) sto creando un file .war ma viene creata tramite formica, non Maven, in modo da avere un tipo di confezionamento guerra nel pom non ha senso. Quale dovrebbe essere il mio tipo di imballaggio?

b) Come faccio a convincere Maven a estrarre l'artefatto dalla mia directory di output della formica per l'obiettivo di implementazione?

c) Se non ci sono risposte valide ad A e B, ci sono attività ant che replicano le funzionalità di implementazione di Maven per ottenere il mio artefatto .war nel repository condiviso?

risposta

51

È possibile utilizzare maven-antrun-plugin per richiamare la generazione di formiche. Quindi utilizzare build-helper-maven-plugin per allegare il vaso prodotto dalla formica al progetto. L'artefatto allegato verrà installato/schierato accanto al pom.
Se si specifica il progetto con la confezione pom, Maven non entrerà in conflitto con la build della formica.

Nell'esempio seguente, si presuppone che form.xml sia in src/main/ant, abbia un obiettivo compile e venga emesso a 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

risposta molto utile Rich, una volta che ho capito che funziona nel mio progetto accetterò la tua risposta. – digitaljoel

+0

Ottimo consiglio. Sfortunatamente non funziona per i file WAR - il plugin di guerra Maven non sembra preoccuparsi degli artefatti di WAR allegati. – mvmn

+0

P.S. Perdonami, funziona davvero una volta che cambio le specifiche di imballaggio a pom - la WAR allegata non interferisce più con WAR generato, e quindi finisce con l'aggiunta in repo correttamente. – mvmn

3

Si può effettivamente avvolgere un progetto ANT con Maven usando multiple ant run goals come ho scritto in una domanda diversa. Supponendo che il tuo progetto ant esistente sia pulito e costruisca attività, questo potrebbe essere un modo utile di avvolgere il progetto in modo da poter utilizzare gli obiettivi Maven e farlo associare a un codice ant esistente.

+0

Grazie Sal, buona risposta. Non si rivolge completamente al mio a, b, ec, ma è comunque utile. – 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> 
Problemi correlati