Java 来自同名不同maven模块的文件不能共存于使用maven程序集插件创建的jar文件中
如果在两个不同的maven模块中有两个内容不同但名称相同的文件,它们都与maven程序集插件一起放在一个jar文件中,只有一个文件最终成为.jar文件的一部分 问题:在构建jar文件时,是否有办法确保将文件内容组装到一个文件中 我显然不想手动将信息放在一起,因为这是我试图通过将项目拆分为不同模块来避免的 编辑:我有一个自定义的程序集描述符,我想保留它,即使我开始使用另一个插件。这个描述符基本上排除了所有的语言,除了英语以外的资源和错误文本Java 来自同名不同maven模块的文件不能共存于使用maven程序集插件创建的jar文件中,java,maven,jar,maven-assembly-plugin,multi-module,Java,Maven,Jar,Maven Assembly Plugin,Multi Module,如果在两个不同的maven模块中有两个内容不同但名称相同的文件,它们都与maven程序集插件一起放在一个jar文件中,只有一个文件最终成为.jar文件的一部分 问题:在构建jar文件时,是否有办法确保将文件内容组装到一个文件中 我显然不想手动将信息放在一起,因为这是我试图通过将项目拆分为不同模块来避免的 编辑:我有一个自定义的程序集描述符,我想保留它,即使我开始使用另一个插件。这个描述符基本上排除了所有的语言,除了英语以外的资源和错误文本 <id>jar-with-dependenc
<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>
jar与依赖项
罐子
假的
/
真的
真的
运行时
**/*资源_*
**/*错误文本_*
如文件规定:
如果您的项目想要将您的工件打包到uber jar中,那么组装插件只提供基本支持。要获得更多控制,请使用Maven Shade插件
使用,您可以拥有一个胖jar(就像使用汇编插件一样),并使用解决合并文件的类似问题。在您的情况下,将合并具有相同名称但具有不同内容的文件 某些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>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>**/*Resources_*</exclude>
<exclude>**/*ErrorsText_*</exclude>
</excludes>
</filter>
</filters>
</configuration>
org.apache.maven.plugins
一个简单的配置(与上面的配置合并)如下所示:
<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>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>**/*Resources_*</exclude>
<exclude>**/*ErrorsText_*</exclude>
</excludes>
</filter>
</filters>
</configuration>
*:*
**/*资源_*
**/*错误文本_*
也遇到了这个问题,我需要从依赖模块中筛选出同名的资源文件,解决方案如下:
<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>
<filters>
<filter>
<artifact>artifact1</artifact>
<excludes>
<exclude>application.yml</exclude>
<exclude>logging.yml</exclude>
</excludes>
</filter>
<filter>
<artifact>artifact2</artifact>
<excludes>
<exclude>application.yml</exclude>
<exclude>logging.yml</exclude>
</excludes>
</filter>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
org.apache.maven.plugins
我是否失去了使用maven shade插件编写自定义程序集描述符的能力?@replayleif您自定义的程序集描述符是什么?你能把它添加到你的问题或者至少是它的相关部分吗?@replayle如果检查我的编辑,我已经添加了必要的指针和一个示例来说明如何实现同样的效果