2013-05-26 13 views
10

Frage ..
Ich mag würde eine Abhängigkeit von einem Maven jar damit verpackt hinzuzufügen sind Abhängigkeiten.Maven - In jar-with-Abhängigkeiten als dependecy

Einzelheiten ..
Ich habe ein Multi-Modul Maven Projekt, in dem eine der Modul auf nativen Bibliotheken und dergleichen abhängt. Als Teil von ihm ist zu bauen, verpackt sie es die Abhängigkeiten in ein jar-with-dependencies oben wie hier gezeigt:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
     <archive> 
      <manifest> 
       <mainClass>${mainClass}</mainClass> 
      </manifest> 
     </archive> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Alles gut, ich zwei Gläser, wenn ich bauen:

seaniscool-0.0.1-SNAPSHOT.jar 
seaniscool-0.0.1-SNAPSHOT-jar-with-dependencies.jar 

aber ich möchte Verwenden Sie dieses Artefakt in einem anderen Modul desselben Projekts. Wenn ich das Modul einfach als Abhängigkeit hinzufüge, erhalte ich das Jar ohne die nativen Bibliotheken.

Ich könnte die Build-Konfiguration duplizieren, um die nativen Bibliotheken in das zweite Modul auch aufzunehmen, es ist nicht sehr umfangreich, würde es aber nicht bevorzugen.

Irgendwelche Ideen, wie ich die jar-with-dependencies als Abhängigkeit hinzufügen kann und damit von den Bibliotheken abhängen?

Einige Gedanken ..
Ich weiß, ich kann einen separaten Gefäß mit Testklassen erstellen, die Maven verweisen können:

Im 1. Modul:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.2</version> 
    <executions> 
     <execution> 
      <goals> 
       <goal>test-jar</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

Im 2. Modul:

<dependency> 
    <groupId>my.group.id</groupId> 
    <artifactId>my.artifact.id</artifactId> 
    <version>my.version</version> 
    <type>test-jar</type> 
    <scope>test</scope> 
</dependency> 

Ist dieses Konzept hier vielleicht übertragbar?

+0

Warum wollen Sie speziell das Glas mit Abhängigkeiten und nicht nur die Abhängigkeiten, das ist, was Maven tut für transitive Abhängigkeiten Sie Griffe? –

+0

Es sind nicht die Java-Abhängigkeiten des JAR, nach denen ich suche, es sind die DLL-Dateien und was Sie haben, die damit verbunden sind. –

Antwort

19

Sie können dies mit einem maven classifier tun. Classfiers werden verwendet, so dass ein Maven-Modul mehrere Artefakte aus derselben Quelle erstellen kann. Beispiele sind jdk1.6 oder 1.7 Version oder sogar die Quelle und javadoc jars maven kann bauen.

Also versuchen Sie dies:

<dependency> 
    <groupId>yourID</groupId> 
    <artifactId>seaniscool</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <classifier>jar-with-dependencies</classifier> 
</dependency> 

Wenn Sie Ihre classfier zu einem besseren Namen wie mitnative oder vollständige oder irgendetwas anderes haben einen Blick auf die maven shade plugin umbenennen, die auch Gläser mit Abhängigkeiten aufbauen können aber erlaubt einige mehr Steuerung.

+0

Das macht den Trick, danke @mszalbach. –

+0

Kühl. Danke für Ihre Hilfe! –

+0

Danke ..es hat funktioniert – Buminda

1

nur eine Randnotiz zu @msczalbach's answer

Eigentlich sogar mit standarad maven-jar-Plugin können Sie ein beliebiges Suffix erzeugt Glas geben. Benutze einfach die Konfiguration.

Z. B:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
</plugin> 
<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <descriptorRefs> 
      <descriptorRef>self-contained</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
</plugin> 
Verwandte Themen