2016-04-11 4 views
2

Ich habe ein Multiple-Module-Projekt in IntelliJ eingerichtet. Meine Module Struktur sieht wie folgt aus:Wie baue ich ein Uber jar mit Abhängigkeiten von mehreren Modulen

Project (no pom.xml file) 
| 
|--moduleA 
| | 
| 
|--moduleB 
| |-Log4J 
| |-Jackson 
| 
|--moduleC 
| |-moduleA 
| |-moduleB 
| |-Log4J 
| 
|--moduleD 
| |-moduleC 
| |-moduleA 
| |-moduleB 
| |-Log4J 
| 
|--moduleE 
| |-moduleA 
| |-moduleB 
| |-moduleC 
| |-Log4J 

moduleC hängt von moduleA und moduleB und moduleD hängt von moduleA, moduleB und moduleC. Das gleiche gilt für moduleE.

Ich möchte zwei Uber Gläser erstellen. Ein für moduleD und einen für moduleE, jeder von ihnen die Modulabhängigkeiten enthält, einschließlich Modul A, B und C.

Ich verwende Maven 3 meine Abhängigkeiten und die Maven-Schatten-Plugin zu verwalten die Uber jar zu erstellen.

Ich habe die notwendigen Abhängigkeiten in den pom.xml Dateien wie folgt hinzugefügt:

<dependency> 
    <groupId>com.modules</groupId> 
    <artifactId>moduleA</artifactId> 
    <version>1.0</version> 
</dependency> 

Und ich habe die maven-shade-plugin die pom.xml Dateien jedes Moduls hinzugefügt. Bisher bin ich in der Lage ein uber Glas für moduleA und moduleB zu bauen, aber wenn ich versuche moduleC ich die folgende Fehlermeldung erhalten:

[WARNING] The POM for com.modules:moduleA:jar:1.0 is missing, no dependency information available 
[WARNING] The POM for com.modules:moduleB:jar:1.0 is missing, no dependency information available 

Wie kann ich dieses Problem lösen?

Wenn ich die Module durch IntelliJ baue und betreibe, funktioniert alles. Ich konnte auch ein Uber-JAR bauen, indem ich ein IntellJ-Artefakt konfigurierte.

Wie kann ich Maven dafür konfigurieren? Ich brauche es, weil ich ein Über-Glas für die Produktion verwenden möchte und ich versuche, Jenkins einzurichten, um die Lösung nach einem Commit zu erstellen.

Ich habe den folgenden Beitrag rot: How to create self-containing (standalone) jar of each modules of a multi-module maven project, aber ich konnte es nicht funktionieren.


EDIT:

Dies ist die maven-shade-plugin Einstellungen in moduleA und moduleB

  <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-shade-plugin</artifactId> 
       <version>2.4.3</version> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

Dies ist maven-shade-plugin in moduleC:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>2.4.3</version> 
     <executions> 
      <execution> 
       <phase>package</phase> 
       <goals> 
        <goal>shade</goal> 
       </goals> 
       <configuration> 
        <filters> 
         <filter> 
          <artifact>*:*</artifact> 
          <excludes> 
           <exclude>META-INF/*.SF</exclude> 
           <exclude>META-INF/*.DSA</exclude> 
           <exclude>META-INF/*.RSA</exclude> 
          </excludes> 
         </filter> 
        </filters> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

Wie Sie sehen können, verwende ich die Standardkonfiguration.

+0

Wie haben Sie die maven-shade-plugin Einstellungen definiert? ohne zu sehen, was Sie einrichten, ist es schwer zu diagnostizieren. – Tschallacka

+0

@MichaelDibbets finden Sie im EDIT-Abschnitt für die Konfig. –

+0

https://maven.apache.org/plugins/maven-shade-plugin/examples/includes-excludes.html Gibt es einen Grund, warum Sie nicht definiert haben? – Tschallacka

Antwort

1

Versuchen Zugabe

<includes> 
    <include>**</include> 
</includes> 

an der gleichen Stelle, wo Sie Ihre umfasst nicht definieren.

Das einzige Vorkommen von <filter>, das ich finden kann, ist in Kombination mit dem Einschließen und Ausschließen von Filtern.

Halten Sie mich nicht fest, aber das ist meine Vermutung, warum Ihr Build fehlschlägt.

+0

Es ist immer noch fehlgeschlagen. Meine Vermutung ist, dass es die .jar-Dateien der anderen Module nicht finden kann. –

+0

Haben Sie versucht, ein seperates Projekt zu erstellen, das all diese Projekte beinhaltet und das zu einem Uberjar kompiliert? Um zu verhindern, dass http://mythologian.net/wp-content/uploads/2013/10/Ouroboros-dragon-serpent-snake-symbol.jpg irgendwie passiert, dass es weiterläuft. – Tschallacka

+0

Nein, habe ich nicht. Bis jetzt habe ich versucht, ein Überglas für 'moduleC' zu erstellen und es schlägt fehl. Ich habe 'moduleD' nicht versucht, da ich denke, dass, wenn' muduleC', das eine der Abhängigkeiten von 'modulD' ist, fehlschlägt,' moduleD' ebenfalls fehlschlägt. Schlägst du vor, dass ich ein neues Modul erstellen soll, das nur von 'modulD' abhängig ist und ein Uber-Jar daraus erstelle? Wie würde das funktionieren? –

Verwandte Themen