2013-12-22 63 views
2

我有一個具有多個依賴項的多模塊Maven項目。我想構建一個包含它們的可執行JAR以及我自己編譯的類。我發現maven-assembly-plugin正是我所需要的,除了一個令人討厭的問題。如何在程序集中添加本地依賴項JAR

我的一些依賴項是本地的,並與項目源分佈。我爲他們使用system範圍。它看起來是這樣的:

<dependency> 
    <groupId>com.intellij</groupId> 
    <artifactId>forms_rt</artifactId> 
    <version>1</version> 
    <scope>system</scope> 
    <systemPath>${project.basedir}/lib/forms_rt.jar</systemPath> 
</dependency> 

的問題是,由於某種原因,這些庫不是包裝並在結果JAR依賴其餘捆綁。

我知道的system範圍的使用被認爲是不好的做法,事實上,我甚至可以找到他們的一些(雖然較爲陳舊)在Maven倉庫,但無論如何,它讓我爲難,如何將其與maven-得到解決組裝插件。

萬一我的插件配置是這樣的:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <configuration> 
     <archive> 
      <manifest> 
       <mainClass>repoll.server.Repoll</mainClass> 
      </manifest> 
     </archive> 
     <finalName>${project.build.finalName}-full</finalName> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
     </descriptorRefs> 
    </configuration> 
    <executions> 
     <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

當我明白我必須編寫自定義的描述符,它如包括並解開${project.basedir}/lib目錄中的所有JAR,但在多次嘗試失敗後,我仍然不知道如何操作。

回答

2

我已經設法在這裏找到解決方案。這在this question中有描述。

總之,整個問題是在使用system範圍。事實證明,這種依賴關係被默認過濾掉了,我通過運行mvn package並且啓用了調試輸出(-X/--debug)發現了這種依賴關係。 當本地存儲庫爲這些JAR定義,與項目一起分發時,它們在執行時通過maven-assembly-plugin解壓縮。

相關問題