2017-06-14 56 views
0

我已經成功地使用mvn -U dependency:copy-dependencies下載了所有的依賴項 - 比如說module-a.jar,module-b.jar和module-c.jar。使用maven將依賴關係壓縮到文件樹中

而不是讓他們在一個平面的目錄中,我需要在特定的層次結構中的罐子,也壓縮。

release.zip 
| 
- base/classes/ 
|   | 
|   - module-a.jar 
| 
- customer/ 
     | 
     - classes/ 
     | | 
     |  - module-b.jar 
     | 
     | 
     - plugins/ 
      | 
      - module-c.jar  

有4個項目,上述3個模塊加上聚集在某一版本的所有模塊項目。

是否有可能告訴maven或maven-dependency-plugin將依賴關係複製到所需的結構中?怎麼樣?

+0

什麼是您的特殊佈局的邏輯? (如何決定把每個地方放在哪裏?) –

+0

如果我可以解決這個問題的固定映射,我會很高興。真正的項目包括30多個罐子。除此之外,在某些情況下,具有相同groupId的元素必須被複制到同一個文件夾中,但這不是一個規則,並且還需要將模塊x及其所有依賴項都複製到同一個文件夾中文件夾爲x。 – mike

+2

它必須是依賴插件嗎?您可以使用插件將每個jar複製到正確的目錄,然後使用另一個插件將整個樹打包爲zip。 https://maven.apache.org/plugins/maven-assembly-plugin/更好 - 它允許創建自定義裝配描述符。 – vempo

回答

0

我用自定義組裝描述符的maven程序集插件。在那個描述符中,我不得不使用一個模塊集。在那裏,我可以管理所有不同的目的地目錄(和他們的內容)爲dependencySet s。

我不得不建立一個新項目,其中包含我想打包爲依賴項的所有罐子。在同一個項目中,我不得不參考裝配描述符來配置maven裝配插件。

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> 
    <id>install</id> 
    <includeBaseDirectory>false</includeBaseDirectory> 

    <formats> 
     <format>zip</format> 
    </formats> 

    <moduleSets> 
     <moduleSet> 

      <!-- Needed to have access to all projects in multi module build --> 
      <useAllReactorProjects>true</useAllReactorProjects> 

      <!-- If there is no include, every dependency (or at least more) are included --> 
      <includes> 
       <include>com.company:artifact_01</include> 
      </includes> 

      <binaries> 
       <unpack>false</unpack> 
       <outputDirectory>main/dir</outputDirectory> 

       <dependencySets> 

        <dependencySet> 
         <includes> 
          <include>com.company:artifact_02</include> 
          <include>com.company:artifact_03</include> 
         </includes> 
         <outputDirectory>/main/dir</outputDirectory> 
        </dependencySet> 

        <dependencySet> 
         <includes> 
          <include>org.apache.felix:org.apache.felix.framework</include> 
         </includes> 
         <outputDirectory>/dir/felix</outputDirectory> 
        </dependencySet> 

        <dependencySet> 
         <includes> 
          <include>com.company:artifact_04</include> 
         </includes> 
         <outputDirectory>/dir/felix/plugin</outputDirectory> 
        </dependencySet> 
      </binaries> 
     </moduleSet> 
    </moduleSets> 

</assembly>