lei*_*ood 6 java jar maven maven-assembly-plugin multi-module
如果有两个文件具有不同的内容但在两个不同的maven模块中具有相同的名称,那么它们都与maven assembly-plugin放在一个jar文件中,只有一个文件最终成为.jar文件的一部分.
问题:有没有办法确保在构建jar文件时将文件的内容组合到一个文件中?
我显然不想手动将信息放在一起,因为这是我试图通过在不同模块中拆分项目来避免的.
编辑:我有一个自定义的Assembly-Descriptor,我想保留,即使我开始使用另一个插件.这个描述符基本上排除了所有语言,但英语排除了资源和错误文本.
<id>jar-with-dependencies</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<useProjectArtifact>true</useProjectArtifact>
<unpack>true</unpack>
<scope>runtime</scope>
<unpackOptions>
<excludes>
<exclude>**/*Resources_*</exclude>
<exclude>**/*ErrorsText_*</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
Run Code Online (Sandbox Code Playgroud)
根据maven-assembly-plugin
文档的规定:
如果您的项目想要将工件打包在超级jar中,则程序集插件仅提供基本支持.要获得更多控制,请使用Maven Shade插件.
使用maven-shade-plugin
你可以有一个胖jar(比如使用程序集插件)并解决使用Resources变换器合并文件的类似问题.在您的情况下,AppendingTransformer
将合并具有相同名称但具有不同内容的文件.
某些jar包含具有相同文件名的其他资源(例如属性文件).为避免覆盖,您可以选择通过将其内容附加到一个文件来合并它们.
一个简单的配置看起来像:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>path/to/file/file-name-here</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
更新
您不需要树荫插件的外部程序集描述符,您可以直接将您的要求配置为插件配置.
在您的情况下,要从已组装的jar中排除资源,您可以使用阴影过滤器.
一个简单的配置(与上面的一个合并)看起来像:
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>**/*Resources_*</exclude>
<exclude>**/*ErrorsText_*</exclude>
</excludes>
</filter>
</filters>
</configuration>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1825 次 |
最近记录: |