2009-10-13 22 views
5

¿Es posible evitar implementar el artefacto que está construido de acuerdo con el empaque del proyecto durante 'deploy: deploy' processing?Maven: evite desplegar artefactos implicados en el paquete del proyecto durante el ciclo de vida de construcción estándar

quiero decir lo siguiente:

  • supongamos que tenemos un 'pom.xml' para la aplicación web y definir el tipo de envase como 'guerra';
  • queremos ensamblar '* .war' artefacto o '* .zip' que contiene nuestra aplicación, así como un contenedor de servlet;
  • queremos desplegar solo ese '* .zip' artefacto durante 'deploy: deploy' procesamiento;

I.e. Quiero ser capaz de ejecutar 'mvn despliegan' y tiene los siguientes resultados:

  1. 'myapp.war' se construye;
  2. 'myapp-standalone.zip' está construido;
  3. 'myapp-standalone.zip' se implementa en el repositorio remoto de destino (en cuenta que yo no me molesto si 'myapp.war' se instala en el repositorio local aquí);

yo nos registramos 'war:war documentation' y encontró parámetro 'primaryArtifact'. Sin embargo, menciona solo el repositorio local.

He intentado lo siguiente POM pero todavía despliega ya sea '* .war' o '* .zip' al repositorio remoto:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.mygroup</groupId> 
    <artifactId>myapp</artifactId> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>myapp</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
     <!-- dependencies go here --> 
    </dependencies> 

    <build> 
     <plugins> 
      <! -- plugins like 'compiler' etc --> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <configuration> 
        <primaryArtifact>false</primaryArtifact> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <id>myapp-standalone</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
         <configuration> 
          <descriptors> 
           <descriptor>src/main/assembly/standalone.xml</descriptor> 
          </descriptors> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <distributionManagement> 
     <repository> 
      <-- target repository information --> 
     </repository> 
     <snapshotRepository> 
      <-- target repository information --> 
     </snapshotRepository> 
    </distributionManagement> 
</project> 

Parece que puedo conseguir el comportamiento deseado a través de la que se declara envases proyecto como 'pom' y configurar manualmente todos los mojos que implica 'guerra' envases ('recursos: los recursos de, 'compilador: compilar', 'recursos': testResources, 'compilador: testCompile', 'infalible: Prueba', 'guerra: la guerra', 'instalar: instalar', 'desplegar: desplegar'). Sin embargo, eso haría que el POM fuera bastante detallado y me gustaría evitarlo.

Por lo que tengo entendido, la forma de Maven es tener siempre un artefacto implícito en el tipo de empaquetamiento del proyecto como uno de los artefactos del proyecto. Pero no está claro qué se espera que haga el usuario de Maven si quiere obtener un artefacto que no coincida con ningún tipo de paquete predeterminado (por ejemplo, el archivo '* .zip' único).

¿Alguna idea?

Regards, Denis

+0

considerar la adición de Maven para las etiquetas – pstanton

Respuesta

8

según la documentación Maven Deploy Plugin:

deploy:deploy se utiliza para instalar automáticamente el artefacto, su pom y los artefactos conectados producidos por un proyecto particular. [...]

Así que no creo que sea posible evitar que su guerra se despliegue "tal cual".

Sin embargo, para obtener el efecto deseado, puede agregar un módulo específico a su construcción que se encargaría de producir el ensamblaje (el ensamblaje dependería del módulo de guerra) y configurar el complemento de despliegue en el módulo de guerra para skip deployment de la siguiente manera:

  <plugin> 
      <artifactId>maven-deploy-plugin</artifactId> 
      <version>X.Y</version> 
      <configuration> 
      <skip>true</skip> 
      </configuration> 
     </plugin> 
+0

eso es dirección correcta, pero el problema es que quiero '_ * artefacto war'_ a contener varios _.' * archivos de configuración, pero properties'_ _'. * .zip'_ artefact para contener esos archivos en el directorio _'conf'_. Es decir. no es posible simplemente declarar la dependencia al proyecto empaquetado de guerra y crear una unidad de entrega personalizada e independiente. Sin embargo, parece que solo puedo generar artefactos no únicos pero múltiples del proyecto _'war -'_ packaged. De todos modos, gracias por el consejo. –

+0

No lo entiendo ¿Has logrado crear el archivo zip con el contenido deseado en el módulo war? En caso afirmativo, ¿no puede descomprimir la guerra y aplicar la misma "lógica de ensamblaje" en otro módulo? –

+0

De acuerdo. Eso parece más natural. –

Cuestiones relacionadas