2009-09-21 23 views
38

Usamos maven para nuestro producto grande. Todos nuestros artefactos se implementan en un repositorio archiva compartido utilizando el objetivo de despliegue de Maven. Ahora estoy integrando un producto de terceros que tiene una construcción ant. Sé cómo llamar a los objetivos antis de maven usando el plugin antrun, pero no estoy seguro de cómo configurar el pom en esta instancia. No quiero que maven genere realmente un artefacto, pero sí quiero que extraiga el artefacto que fue construido por ant cuando se ejecuta el objetivo de despliegue de maven.¿Cómo envolver una construcción Ant con Maven?

Estoy planeando tener el pom adyacente a build.xml. El pom usará el plugin antrun en el objetivo del paquete para llamar al objetivo ant en el momento apropiado para construir el artefacto .war.

Preguntas:

a) Estoy creando un archivo .war pero se crea a través de la hormiga, no Maven, por lo que tener un tipo de embalaje guerra en el POM no tiene sentido. ¿Cuál debería ser mi tipo de empaque?

b) ¿Cómo hago que maven extraiga el artefacto de mi directorio de salida de hormigas para el objetivo de despliegue?

c) Si no hay buenas respuestas para A y B, ¿hay algunas tareas que repliquen la funcionalidad de despliegue de maven para obtener mi artefacto .war en el repositorio compartido?

Respuesta

51

Puede usar el maven-antrun-plugin para invocar la construcción de ant. Luego use el build-helper-maven-plugin para unir el tarro producido por ant al proyecto. El artefacto adjunto se instalará/desplegará junto al pomo.
Si especifica su proyecto con el paquete pom, Maven no entrará en conflicto con la construcción de ant.

En el ejemplo siguiente, el build.xml hormiga se supone que es en src/main/ant, tener un compile objetivo, y la salida 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

Muy útil Respuesta Rica, Una vez que lo consiga trabajando en mi proyecto, aceptaré su respuesta. – digitaljoel

+0

Un gran consejo. Lamentablemente, no funciona para los archivos WAR: el complemento maven war no parece preocuparse por los artefactos WAR adjuntos. – mvmn

+0

P.S. Disculpe, en realidad funciona bien una vez que cambio la especificación de embalaje a pom - la WAR adjunta ya no interfiere con la WAR generada, y por lo tanto termina siendo añadida en repos adecuadamente. – mvmn

3

En realidad se puede envolver un proyecto ANT con Maven usando multiple ant run goals como escribí en una pregunta diferente. Suponiendo que su proyecto ant existente tiene tareas de limpieza y compilación, esta podría ser una forma útil de envolver el proyecto para que pueda usar los objetivos de maven y hacer que se asigne al código ant existente.

+0

Gracias Sal, buena respuesta. No acaba de abordar my a, byc, pero de todos modos es útil. – 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> 
Cuestiones relacionadas