使用Maven Assembly插件合并META-INF/services文件

6
我正在寻找一种方法来合并 META-INF/services 文件,例如 META-INF/services/javax.ws.rs.ext.Providers,在使用 Maven Assembly 插件构建 jar-with-dependencies 时。我已经找到了使用 Maven Shade 插件如何实现此操作的答案。不幸的是,我们已经广泛使用了 Mave Assembly 插件,而且不清楚如何将 Maven Shade 插件集成进来。

这个怎么样:https://maven.apache.org/plugins/maven-shade-plugin/usage.html - khmarbaise
如我在原帖中所提到的,我不想使用Shade插件,因为当我已经在使用Assembly插件时,我不清楚该如何做。 - wilx
很抱歉要说,只有尝试并查看其工作原理才是解决问题的方法。否则它将无法正常工作,因为maven-assembly-plugin不支持您所需的功能...而maven-shade-plugin支持按您所需的方式进行合并。因此,我看不到其他选择... - khmarbaise
使用汇编插件的哲学是永远不会修改内容,只会将它们组装起来。正如@khmarbaise所指出的,你的需求已经超出了汇编插件的使用范围,现在进入了“修改内容”世界,而阴影插件就是为此而创建的。提示:你可以同时使用阴影来修改和汇编来组装。 - Joakim Erdfelt
1个回答

10
事实证明,一些版本的Maven Assembly插件可以合并这些文件:
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
    <id>jar-with-dependencies</id>
    <formats>
        <format>jar</format>
    </formats>
    <!-- ... -->
    <containerDescriptorHandlers>
        <containerDescriptorHandler>
            <handlerName>metaInf-services</handlerName>
        </containerDescriptorHandler>
        <containerDescriptorHandler>
            <handlerName>metaInf-spring</handlerName>
        </containerDescriptorHandler>
        <containerDescriptorHandler>
            <handlerName>plexus</handlerName>
        </containerDescriptorHandler>
    </containerDescriptorHandlers>
</assembly>

对我有用。感谢解决方案。 - Surabhi Mundra
@Surabhi Mundra,我也有类似的需求,请问你能提供一下你是如何做到的示例吗?我看到上面接受的示例中有多个文件夹。如何合并提供者? - santosh jk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接