2010-02-05 14 views
12

Tengo una construcción Maven con tres módulos.¿Cómo puedo hacer que un módulo Maven no exporte un contenedor?

  • El módulo A exporta un contenedor.
  • El módulo B depende de A y exporta un jar.
  • Módulo C es un conjunto de pruebas de regresión que dependen de A y B.

La razón las pruebas de regresión no son sólo una parte del módulo B es que deben ser capaces de correr contra múltiples versiones de A y B para garantizar la compatibilidad con versiones anteriores. Quiero poder ejecutar deploy desde la compilación de nivel superior para crear A.jar y B.jar, pero no C.jar. es posible?

+0

Relacionado: [¿Cuál es la mejor manera de evitar maven-jar?] (Http://stackoverflow.com/questions/2188746/what-is-the-best-way-to-avoid-maven-jar) – sleske

Respuesta

7
<properties> 
    <maven.deploy.skip>true</maven.deploy.skip> 
</properties> 

Si Don No es necesario crear un JAR en absoluto, es posible que desee agregar dos propiedades más:

<jar.skipIfEmpty>true</jar.skipIfEmpty> 
<maven.install.skip>true</maven.install.skip> 

Tenga en cuenta que aún necesita maven.deploy.skip, de lo contrario, la compilación fallará durante la implementación.

+0

Me tomé la libertad de agregar cómo suprimir la creación del JAR, en caso de que no sea necesario. – sleske

2

Uso continuación para el módulo C:

<packaging>pom</packaging> 
+0

Intenté eso. Luego ejecuto la prueba mvn desde el nivel superior, y las pruebas de C no se ejecutan. –

+0

Es posible que deba reorganizar la jerarquía de sus POM. Por ejemplo, puede necesitar un super pom en la parte superior y luego C como un submódulo y luego A y B como submódulos en C. –

+0

Si elige el tipo de paquete de pom, tendrá que volver a vincular manualmente todos los complementos habituales según la respuesta de Pascal a continuación. Aún desea el empaquetamiento de jar para C, solo necesita deshabilitar la implementación para ese módulo. Sal tiene la respuesta correcta aquí. – joelittlejohn

5

El experto desplegar plug-in incluye un skip opciones que impide el despliegue de artefactos.

<plugin> 
    <artifactId>maven-deploy-plugin</artifactId> 
    <configuration> 
     <skip>true</skip> 
    </configuration> 
</plugin> 

Usted puede tratar de añadir que para proyectar C.

3

Utilice un envase de tipo pom para C y vuelva a enlazar todos los complementos necesarios:

<project> 
    ... 
    <packaging>pom</packaging> 
    ... 
    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-compiler-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>test-compile</id> 
      <phase>test-compile</phase> 
      <goals> 
       <goal>testCompile</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-resources-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>process-test-resources</id> 
      <phase>process-test-resources</phase> 
      <goals> 
       <goal>testResources</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-surefire-plugin</artifactId> 
     <executions> 
      <execution> 
      <id>test</id> 
      <phase>test</phase> 
      <goals> 
       <goal>test</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
     ... 
    </plugins> 
    ... 
    </build> 
    ... 
</project> 
+0

Aunque eso probablemente funcione, es bastante detallado. La respuesta de Craig P. Motlin proporciona una solución más agradable. – sleske

Cuestiones relacionadas