2012-09-06 8 views
15

Maven erfordert ein übergeordnetes ProjektWie zu generieren jar für Maven übergeordnetes Projekt

<packaging>pom</packaging>

Klausel in den pom.xml der Eltern zu haben. Wenn solch ein Projekt installiert wird, wird nur eine Pom-Datei in das Maven-Repository generiert. Jar-Datei wird nicht generiert, unabhängig davon, ob das übergeordnete Projekt über Java-Code verfügt. Das zwingt mich, extra leere Elternprojekte zu haben, was übertrieben ist. Logischerweise könnten einige meiner Bibliotheken gleichzeitig Eltern sein.

Gibt es eine Möglichkeit, Pom- und JAR-Dateien für ein übergeordnetes Projekt zu generieren, ohne die packaging-Klausel zwischen den Installationen zu entfernen/hinzufügen?

Antwort

10

Verwenden Sie Maven Jar Plugin und Maven Build Helper. Beispiel POM:

<?xml version="1.0" encoding="UTF-8"?> 
<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/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>test</groupId> 
    <artifactId>test</artifactId> 
    <version>1.0</version> 

    <packaging>pom</packaging> 

    <build> 
    <plugins> 
     <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>test-${project.version}</file> 
        <type>jar</type> 
       </artifact> 
       </artifacts> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.4</version> 
     <executions> 
      <execution> 
      <id>default</id> 
      <goals> 
       <goal>jar</goal> 
      </goals> 
      <phase>package</phase> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
</project> 

Maven bauen Ergebnisse:

mvn install 
[INFO] Scanning for projects... 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building test 1.0 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- build-helper-maven-plugin:1.7:attach-artifact (attach-artifacts) @ test --- 
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default) @ test --- 
[WARNING] JAR will be empty - no content was marked for inclusion! 
[INFO] 
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ test --- 
[INFO] Installing /home/username/projects/test/pom.xml to /home/username/.m2/repository/test/test/1.0/test-1.0.pom 
[INFO] Installing /home/username/projects/test/test-1.0 to /home/username/.m2/repository/test/test/1.0/test-1.0.jar 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 0.805s 
[INFO] Finished at: Thu Sep 06 13:33:20 EDT 2012 
[INFO] Final Memory: 4M/119M 
[INFO] ------------------------------------------------------------------------ 

Ein Hinweis auf Maven Praktiken:

Geordnete Module sind typischerweise in dem Sie die Abhängigkeiten und Plugins gemeinsam Module von allen Ihr Kind verwendet definieren . Es hat selten eine eigene Ausgabe. Wahrscheinlich möchten Sie ein Untermodul "Distribution" haben, das alle anderen Modulartefakte aggregiert, anstatt es im übergeordneten Modul zu versuchen.

+2

Vielen Dank, noahz, für Ihre Lösung. Ich möchte JAR-Datei für ein Elternprojekt generieren, um zusätzliche leere Projekte in meinem Eclipse-Arbeitsbereich zu vermeiden und somit Projektbeziehungen zu vereinfachen. Ich bin neu in Maven, also könnte ich mich irren. Empfiehlst du, leere Elternprojekte zu verwenden? Ich vermute, dass deine Lösung Kinderprojekte in Konflikt bringt, die eigene jar-building Plugins haben. – Kallisto

+2

Es ist vollkommen in Ordnung, ein übergeordnetes Projekt zu haben, das "leer" ist (erzeugt keine Artefakte), da es nur dazu dient, Eigenschaftseinstellungen, Abhängigkeitsversionen, Plugins usw. zu definieren, die von untergeordneten Projekten verwendet werden. BTW - Wenn Sie meine Lösung verwenden, akzeptieren Sie die Antwort, indem Sie auf das Häkchen klicken. – noahlz

+0

Vielen Dank für Ihre Antwort und die Erklärungen. Ich werde Ihrer Empfehlung folgen, leere Projekte als Eltern zu verwenden. – Kallisto