关于java:Maven程序集插件合并策略

Maven Assembly Plugin Merge Strategy

我正在尝试将Scala / Java项目构建从sbt转换为Maven。我已经开始运行该项目,除了尝试打包胖子罐时没有任何问题。

尝试编写合并策略时遇到一些问题。这是我尝试从build.sbt转换的代码:

1
2
3
4
5
assemblyMergeStrategy in assembly := {
  case PathList("META-INF","MANIFEST.MF")  => MergeStrategy.discard
  case PathList("META-INF", xs @ _*)        => MergeStrategy.first
  case x                                    => MergeStrategy.first
}

我正在尝试将Maven的程序集插件与自定义描述符一起使用。我一直在使用提供的容器描述符处理程序,但是没有一个像sbt那样合并。这是我到目前为止的内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<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>my-project</id>
<formats>
    <format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<dependencySets>
    <dependencySet>
        <outputDirectory>/</outputDirectory>
        <useProjectArtifact>true</useProjectArtifact>
        <unpack>true</unpack>
        <scope>runtime</scope>
    </dependencySet>
</dependencySets>

<containerDescriptorHandlers>
    <containerDescriptorHandler>
        <handlerName>metaInf-services</handlerName>
    </containerDescriptorHandler>
    <containerDescriptorHandler>
        <handlerName>metaInf-spring</handlerName>
    </containerDescriptorHandler>
    <containerDescriptorHandler>
        <handlerName>plexus</handlerName>
    </containerDescriptorHandler>
</containerDescriptorHandlers>

有什么方法可以从sbt构建中模拟MergeStrategy吗?


在我从Maven迁移到SBT的"冒险"期间,我认为我也碰到了类似的问题,我可以提供一些见识。

您可以选择一个,或两者都选:

  • 阅读我的问题的答案
  • 看看我的github项目,它挖掘了这个主题

摘要

由于您应该担心的唯一sbt assembly MergeStrategyMergeStrategy.first,因此您的Maven构建应该很好,因为它是Maven中的默认设置。该罐子将具有不同的内容,但其功能将相同。

除非我缺少任何内容,否则请提供更多详细信息。