2015-11-20 125 views
1

看來,包含與provided作用域的直接依賴關係似乎很好理解。它也似乎包括與runtime範圍傳遞依賴關係也很容易完成。Maven程序集插件:如何包含傳遞依賴關係的提供依賴關係

但我怎麼能包括一個依賴兩個層面的間接?

實施例:

A --> B --> C 

其中A依賴於B(編譯範圍)和B取決於C(提供範圍)。

我想A檢索C(例如:本地下載jar),通過彙編描述符或maven-dependency-plugin:copy-dependencies或其他一些機制。

我已經試過貌似上述兩個插件的選項的每個組合。這兩種方法都不涉及這種情況。他們都得到B(即使B更改爲提供的依賴),以及任何編譯B範圍的依賴,但沒有提供B.

的依賴,我想,我試圖做類似陰影表示什麼我的項目,但沒有解壓依賴關係。

當然,我不想在A的pom中枚舉B的所有依賴關係 - 我想隱式地和遞歸地檢索(然後打包)所有的依賴關係。

回答

0

你將無法做到這一點。它不是maven-assembly-plugin的限制,而是Maven考慮傳遞依賴的方式。總是會忽略範圍爲provided的傳遞依賴項(請參閱文檔中的this table)。

這是一個開放的bug(MNG-2205),但我認爲它不會很快被修復。這實際上是預期的行爲,因爲provided依賴項按照名稱應該在運行時提供。

0

雖然Tunaki是完全正確的,我發現了一個可行的解決方案,這比沒有好,用不太知名的插件(注:僅適用於Maven的< = 3.0.x的)

這指定兩個依賴塊。第一個包含傳遞的正常編譯階段,這與使用複製依賴關係相同。第二塊特別提到乙除了正常POM依賴性聲明(不幸的是,但至少兩個依賴性提到在相同的POM)並請求其提供DEPS:

 <plugin> 
      <groupId>com.github.goldin</groupId> 
      <artifactId>copy-maven-plugin</artifactId> 
      <version>0.2.5</version> 
      <executions> 
       <execution> 
        <id>get-provided-dependencies</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>copy</goal> 
        </goals> 
        <configuration> 
         <resources> 
          <resource> 
           <targetPath>${project.build.directory}/lib</targetPath> 
           <dependencies> 
            <dependency> 
             <includeScope>compile</includeScope> 
            </dependency> 
            <dependency> 
             <groupId>some.group</groupId> 
             <artifactId>artifact_i_call_B</artifactId> 
             <version>1.0</version> 
             <includeScope>provided</includeScope> 
            </dependency> 
           </dependencies> 
          </resource> 
         </resources> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

文檔這個插件可以只存在在這一點上的存檔,不知道發生了什麼事: http://web.archive.org/web/20130826193436/http://evgeny-goldin.com/wiki/Copy-maven-plugin