2011-04-08 30 views
5

我有一個Maven程序集插件的問題。使用Maven程序集合並屬性文件

我有一個使用幾個罐子的maven項目。每個jar包含配置文件。 通過另一個項目,我使用Maven Assembly插件將所有配置組裝到獨特的jar中。

所有工作正常,但不幸的是,兩個文件是相同的名稱,第二個覆蓋第一個。

我不能告訴maven合併兩個文件而不是覆蓋。

有人知道如何做到這一點?

謝謝。

回答

0

您可能會嘗試重命名第一個文件,然後合併這兩個文件。

這裏是計算器一個主題,在這樣的文件的重命名爲documentated: Renaming resources in Maven

+0

好吧,我可以重命名文件,但如何合併它之後呢?如果可能,使用程序集插件。 – Kiva 2011-04-08 17:21:32

8

maven-shade-plugin結合AppendingTransformer應該做你想做的。

我們使用它將來自兩個zip項目(定義爲單獨的maven模塊)的屬性文件合併到一個zip文件中。這將從兩個模塊創建文件和目錄的超集,並將指定的屬性文件合併在一起。我們還將模塊定義爲合併的maven模塊的依賴項。

像這樣的東西應該做的伎倆:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.4</version> 
     <executions> 
     <execution> 
      <phase>package</phase> 
      <goals> 
     <goal>shade</goal> 
      </goals> 
      <configuration> 
     <filters> 
      <filter> 
      <artifact>groupname:artifactname</artifact> 
      <includes> 
       <include>**/*</include> 
      </includes> 
      </filter> 
     </filters> 
     <transformers> 
      <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
      <resource>propertyfiletomerge.properties</resource> 
      </transformer> 
     </transformers> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
0

基於Skarab的答案,這裏是我以前使用maven-antrun-plugin來解決這個問題的代碼:

<project> 
... 
<build> 
    ... 
    <plugins> 
     ... 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-antrun-plugin</artifactId> 
      <version>1.8</version> 
      <executions> 
       <execution> 
       <phase>prepare-package</phase> 
       <configuration> 

        <target> 
         <concat destfile="${project.build.directory}/setup_db.sql"> 
          <fileset file="${project.basedir}/src/main/resources/db/sql_one/*.sql" /> 
          <fileset file="${project.basedir}/src/main/resources/db/sql_another/*.sql" /> 
         </concat> 
        </target> 

       </configuration> 
       <goals> 
        <goal>run</goal> 
       </goals> 
       </execution> 
      </executions> 
     </plugin> 
     ... 
    </plugins> 
</build>