Java 来自同名不同maven模块的文件不能共存于使用maven程序集插件创建的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

如果在两个不同的maven模块中有两个内容不同但名称相同的文件,它们都与maven程序集插件一起放在一个jar文件中,只有一个文件最终成为.jar文件的一部分

问题:在构建jar文件时,是否有办法确保将文件内容组装到一个文件中

我显然不想手动将信息放在一起,因为这是我试图通过将项目拆分为不同模块来避免的

编辑:我有一个自定义的程序集描述符,我想保留它,即使我开始使用另一个插件。这个描述符基本上排除了所有的语言,除了英语以外的资源和错误文本

<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如果检查我的编辑,我已经添加了必要的指针和一个示例来说明如何实现同样的效果