2013-05-26 3 views
10

domanda ..
vorrei aggiungere una dipendenza su un vaso Maven confezionato con il suo dipendenze.Maven - Aggiungere vaso-con-le dipendenze come dependecy

dettagli ..
Ho un progetto Maven multi-modulo in cui uno del modulo dipende da librerie native e simili. Come parte di esso di costruire, confeziona su è dipendenze in un jar-with-dependencies come illustrato di seguito:

<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> 

Tutto bene, ottengo due vasetti quando costruire:

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

Tuttavia, mi piacerebbe usa questo artefatto in un altro modulo dello stesso progetto. Se aggiungo semplicemente il modulo come dipendenza, ottengo il barattolo senza le librerie native incluse.

Potrei duplicare la configurazione di build per includere anche le librerie native nel secondo modulo, non è molto esteso, ma preferirei non farlo.

Qualche idea su come posso aggiungere lo jar-with-dependencies come dipendenza e quindi dipendere dalle librerie incluse?

Alcuni pensieri ..
so di poter costruire un vaso separato con le classi di test che Maven può fare riferimento a:

Nel 1 ° modulo:

<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> 

Nel 2 ° modulo:

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

Questo concetto è trasferibile qui?

+0

Perché si vuole specificamente il vaso con le dipendenze piuttosto che solo le dipendenze, che è quello che fa per voi Maven-maniglie dipendenze transitive? –

+0

Non sono le dipendenze Java del jar che cerco, sono i file dll e cosa hai in bundle con esso. –

risposta

19

È possibile farlo con un maven classifier. I classificatori sono utilizzati in modo tale che un modulo esperto possa creare più artefatti dalla stessa fonte. Esempi sono la versione jdk1.6 o 1.7 o anche i jar javadoc e javadoc possono essere compilati.

Quindi provare questo:

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

Se si desidera rinominare l'classfier a un nome migliore, come withNative o completa o qualsiasi altra cosa avere uno sguardo alla maven shade plugin che può anche costruire vasi con le dipendenze, ma permette ancora un po ' controllo.

+0

Questo è il trucco, grazie a @mszalbach. –

+0

Freddo. Grazie per l'aiuto! –

+0

Grazie .. ha funzionato – Buminda

1

Solo una nota a margine per @msczalbach's answer

In realtà, anche con standarad Maven-jar-plugin è possibile dare alcun suffisso al barattolo generato. Basta usare la configurazione.

es:

<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>