2013-05-26 37 views
10

問題..
我想補充與它打包Maven的罐子依賴的依賴的Maven - 添加JAR-具有依賴性的dependecy

詳細..
我在該模塊的一個依賴於本地庫等的多模塊Maven項目。因爲它是構建的一部分,它封裝了它的依賴性爲jar-with-dependencies如下所示:

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

都好,我得到兩個罐子,當我建:

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

不過,我想在同一個項目的另一個模塊中使用這個工件。如果我簡單地添加模塊作爲依賴項,我會得到沒有包含本地庫的jar。

我可以複製構建配置,以包括在第二個模塊中的本地庫也不是很廣泛,但不願意。

任何想法如何添加jar-with-dependencies作爲依賴關係,從而取決於所包含的庫?

的幾點思考..
我知道我可以建立測試類獨立的罐子是Maven可以參考:

在1個模塊:

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

在第二模塊:

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

這個概念在這裏可以傳遞嗎?

+0

爲什麼你特別希望有依賴性,而不是僅僅依賴罐子,這是Maven的做什麼你-處理傳遞依賴? –

+0

這不是我所追求的jar的Java依賴關係,它是dll文件,它與你捆綁在一起。 –

回答

19

你可以用maven classifier來做到這一點。使用Classfiers是爲了讓Maven模塊可以從同一個源創建多個文物。例子是jdk1.6或1.7版本,甚至可以創建源代碼和javadoc jar文件。

那麼試試這個:

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

如果你想你的classfier重命名爲像withNative或一個更好的名字完整的或任何其他具有看看maven shade plugin也可以建立依賴關係罐,但允許更多一些控制。

+0

這樣做,謝謝@mszalbach。 –

+0

很酷。謝謝你的幫助! –

+0

謝謝..他工作 – Buminda

1

只是一個側面說明,以@msczalbach's answer

其實,即使standarad的maven-JAR-插件,你可以給任何後綴來生成JAR。只需使用配置。

E.g:

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