我对 Maven 程序集插件有疑问。
我有一个使用几个罐子的 Maven 项目。每个 jar 都包含配置文件。在另一个项目中,我使用 maven 组装插件将所有配置组装到唯一的 jar 中。
一切正常,但不幸的是,两个文件同名,第二个文件覆盖第一个文件。
我没有实现告诉 maven 合并两个文件而不是覆盖。
有人知道该怎么做吗?
谢谢。
我对 Maven 程序集插件有疑问。
我有一个使用几个罐子的 Maven 项目。每个 jar 都包含配置文件。在另一个项目中,我使用 maven 组装插件将所有配置组装到唯一的 jar 中。
一切正常,但不幸的是,两个文件同名,第二个文件覆盖第一个文件。
我没有实现告诉 maven 合并两个文件而不是覆盖。
有人知道该怎么做吗?
谢谢。
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>
这不正是您要找的东西,但我会使用http://maven.apache.org/plugins/maven-antrun-plugin/插件来运行 ant concat 任务http://ant.apache.org/manual/ Tasks/concat.html合并文件。我会在准备包阶段运行 maven-antrun。
根据 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>
您可以尝试重命名第一个文件,然后合并这两个文件。
这是stackoverflow上的一个线程,其中记录了此类文件的重命名: Renaming resources in Maven