我的maven程序集插件有问题。
我有一个使用几个罐子的maven项目。每个jar包含配置文件。 在另一个项目中,我使用maven程序集插件在独特的jar中组装所有配置。
一切正常,但遗憾的是,两个文件的名称相同,第二个文件覆盖了第一个文件。
我没有告诉maven合并这两个文件而不是覆盖。
有人知道怎么做吗?
感谢。
答案 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