2009-04-15 13 views
21

Tengo un artefacto que se está creando e implementando de una manera particular (no como un archivo jar). En el transcurso de la implementación, se genera un archivo war.maven deploy archivo jar adicional

¿Cómo puedo configurar el pom para que el artefacto también se despliegue como un archivo jar en una ubicación diferente?

+1

¿Cuál es la "forma particular" que están construyendo y desplegando? ¿Qué se entiende por "en el curso de la implementación"? Una muestra de su pom actual podría ayudar a aclarar esta pregunta. –

Respuesta

2

Debe agregar la dependencia correspondiente del artefacto en las dependencias del archivo pom.

Ex:

<dependency> 
     <groupId>org.apache.myfaces.core</groupId> 
     <artifactId>myfaces-api</artifactId> 
     <version>1.2.2</version> 
     <scope>compile</scope> 
</dependency> 
+0

¿Hacer un artefacto depende de sí mismo? No entiendo cómo esto afectaría la implementación. Y, de hecho, a maven no le gusta la referencia cíclica resultante. –

5

El "modo experto" es dividir a cabo src/main/java en un módulo separado, y tener el archivo de la guerra dependerá de eso.

Si es absolutamente resistente a este enfoque, es posible que pueda utilizar un perfil para modificar el contenido del elemento packaging. No estoy seguro si eso es posible sin embargo.

+1

No puede cambiar el embalaje de perfil directamente, pero puede hacer que el embalaje dependa de la propiedad y alterar esa propiedad de perfil. –

3

Separarlos es el camino correcto a seguir. Obligar al maven a producir una guerra y una jarra en el mismo módulo es posible, pero te causará problemas en el futuro.

+0

¿Qué problemas? Si necesita un jar, y está producido por ese módulo ... entonces debería estar bien siempre y cuando ese jarrón siempre sea producido por ese módulo ... (y usted tiene dependencia de ese jarrón). Si hay un problema de maven más específico que tuviste en mente ... – smaudet

0

Una forma de resolver esto es hacer que el módulo construya un jar y luego usar el plugin de ensamblaje para construir un archivo war con el jar en WEB-INF/lib de esa guerra. Recomiendo encarecidamente en contra de esto. Sería mejor tener un proyecto jar y un proyecto de guerra con un proyecto padre creando ambos módulos.

20

Este blog post y sus comentarios tienen la respuesta.

Estas tres configuraciones de complementos le permitirán construir/instalar/implementar una versión de jar junto con la guerra.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-install-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>install</phase> 
      <goals> 
       <goal>install-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file> 
        ${project.build.directory}/${project.artifactId}-${project.version}.jar 
       </file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>deploy</phase> 
      <goals> 
       <goal>deploy-file</goal> 
      </goals> 
      <configuration> 
       <packaging>jar</packaging> 
       <generatePom>true</generatePom> 
       <url>${project.distributionManagement.repository.url}</url> 
       <artifactId>${project.artifactId}</artifactId> 
       <groupId>${project.groupId}</groupId> 
       <version>${project.version}</version> 
       <file>${project.build.directory}/${project.artifactId}-${project.version}.jar</file> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+0

Al usar maven-install-plugin como describes has resuelto el mismo problema que he encontrado al intentar instalar el archivo jar generado pero no implementado usando el plugin android maven paquete de embalaje a aar. Necesito el archivo jar como una solución para el problema visual IDE de netbeans con tales dependencias. – Amin

+0

Debe ser evidente, pero recuerde que si su proyecto creó el contenedor con un nombre diferente (o establece el nombre final en su compilación), tendrá que ajustar de acuerdo con $ {build.finalName} .jar en lugar de lo anterior.Verifique su directorio de destino para ver qué jar realmente se produce. – smaudet

23

Maven deploy medios despliegan artefacto a un repositorio Maven , no un servidor de aplicaciones.

Configurar artefacto adicional JAR como esto:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <executions> 
     <execution> 
      <id>make-a-jar</id> 
      <phase>compile</phase> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Fije este nuevo artefacto a su proyecto:

<plugin> 
    <groupId>org.codehaus.mojo</groupId> 
    <artifactId>build-helper-maven-plugin</artifactId> 
    <version>1.7</version> 
    <executions> 
     <execution> 
      <id>attach-artifacts</id> 
      <phase>package</phase> 
      <goals> 
       <goal>attach-artifact</goal> 
      </goals> 
      <configuration> 
       <artifacts> 
        <artifact> 
         <file>some file</file> 
         <type>jar</type>       
        </artifact> 
       </artifacts> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 
+2

Con "build-helper-maven-plugin", pude implementar war, jar y test-jar desde un único proyecto. Desafortunadamente, la creación de nuevos módulos no era una opción, por otras razones, por lo tanto, técnicas. ¡Esto fue un salvavidas! – javashlook

+0

me salvó las horas. – Sohan

Cuestiones relacionadas