使用Maven程序集合并属性文件

时间:2011-04-08 16:52:52

标签: java maven maven-plugin maven-assembly-plugin

我的maven程序集插件有问题。

我有一个使用几个罐子的maven项目。每个jar包含配置文件。 在另一个项目中,我使用maven程序集插件在独特的jar中组装所有配置。

一切正常,但遗憾的是,两个文件的名称相同,第二个文件覆盖了第一个文件。

我没有告诉maven合并这两个文件而不是覆盖。

有人知道怎么做吗?

感谢。

4 个答案:

答案 0 :(得分:8)

结合AppendingTransformer的maven-shade-plugin应该做你想要的。

我们使用它将来自两个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>

答案 1 :(得分:5)

这不完全是您要找的,但我会使用http://maven.apache.org/plugins/maven-antrun-plugin/插件来运行ant concat任务http://ant.apache.org/manual/Tasks/concat.html来合并文件。我会在prepare-package阶段运行maven-antrun。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

您可以尝试重命名第一个文件,然后合并这两个文件。

这是一个关于stackoverflow的线程,其中记录了这样一个文件的重命名: Renaming resources in Maven