2010-02-05 20 views
12

Ich habe einen Maven Build mit drei Modulen.Wie kann ich ein Maven-Modul dazu bringen, ein Glas nicht zu exportieren?

  • Modul A exportiert ein Glas.
  • Modul B hängt von A ab und exportiert ein Glas.
  • Modul C ist ein Satz von Regressionstests, die auf A und B hängen

Der Grund, warum die Regressionstests sind nicht nur B-Teil des Moduls ist, dass sie fähig sein sollten gegen mehrere Versionen von A zu laufen und B, um Abwärtskompatibilität zu gewährleisten. Ich möchte in der Lage sein, deploy vom obersten Build auszuführen, um A.jar und B.jar, aber nicht C.jar zu erstellen. Ist das möglich?

+0

Verwandte: [Was ist der beste Weg, Maven-Jar zu vermeiden?] (Http://stackoverflow.com/questions/2188746/what-ist-the-best-way-to-avoid-maven-jar) – sleske

Antwort

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

Wenn Sie don Wenn Sie kein JAR erstellen möchten, können Sie zwei weitere Eigenschaften hinzufügen:

Beachten Sie, dass Sie weiterhin maven.deploy.skip benötigen, andernfalls schlägt der Build während der Bereitstellung fehl.

+0

Ich habe mir erlaubt, hinzuzufügen, wie man die Erzeugung der JAR unterdrückt, falls sie nicht benötigt wird. – sleske

2

Verwenden unten für Modul C:

<packaging>pom</packaging> 
+0

Ich habe das versucht. Dann starte ich mvn test von der obersten Ebene, und C's Tests laufen nicht. –

+0

Möglicherweise müssen Sie die Hierarchie Ihrer POMs neu organisieren. Zum Beispiel benötigen Sie möglicherweise ein Superpom oben und dann C als Submodul und dann A und B als Submodule unter C. –

+0

Wenn Sie Verpackungstyp von Pom wählen, müssen Sie alle üblichen Plugins manuell erneut binden wie in Pascals Antwort unten. Sie möchten immer noch Jar-Verpackungen für C, Sie müssen nur die Bereitstellung für dieses Modul deaktivieren. Sal hat hier die richtige Antwort. – joelittlejohn

5

Die Maven bereitstellen Plugin eine skip Optionen enthält, die Artefakt Einsatz verhindert.

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

Sie können versuchen, fügte hinzu, dass zu projizieren C.

3

eine Verpackung vom Typ Verwenden Sie pom für C und rebind alle benötigten Plugins:

<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

Während das wahrscheinlich funktioniert, ist es ziemlich ausführlich. Craig P. Motlins Antwort bietet eine bessere Lösung. – sleske

Verwandte Themen