You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Maven Assembly Plugin至3.7.1后single goal生成归档时遗漏POM文件的解决方法咨询

升级Maven Assembly Plugin至3.7.1后single goal生成归档时遗漏POM文件的解决方法咨询

我之前升级Assembly插件的时候也碰到过完全一样的问题!原来的<repositories>标签确实会自动把指定依赖的JAR和POM都复制到对应路径,但换成<dependencySets>之后,插件默认只会处理jar类型的构件,这就是POM文件消失的原因。

别担心,有几种实用的解决办法,我给你分享两个最常用的:

方法一:在同一个DependencySet中同时包含JAR和POM

你可以修改现有的<dependencySet>,通过<includes>明确指定要包含目标依赖的JAR和POM类型,再借助outputFileNameMapping保证两者都能生成正确的路径:

<dependencySets>
  <dependencySet>
    <useProjectArtifact>false</useProjectArtifact>
    <outputFileNameMapping>
      ${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/${artifact.artifactId}-${artifact.version}${dashClassifier}.${artifact.extension}
    </outputFileNameMapping>
    <includes>
      <include>com.example.data:database-access</include>
      <include>com.example.data:database-access:pom</include>
    </includes>
  </dependencySet>
</dependencySets>

这里第二个<include>明确指定了要抓取该依赖的POM构件,插件就会把它和JAR一起复制到你定义的目录结构下。

方法二:创建两个独立的DependencySet(逻辑更清晰)

如果你的依赖数量多,或者想分开控制JAR和POM的输出规则,可以分别创建两个<dependencySet>,一个处理JAR,一个专门处理POM:

<dependencySets>
  <!-- 处理JAR文件 -->
  <dependencySet>
    <useProjectArtifact>false</useProjectArtifact>
    <outputFileNameMapping>
      ${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/${artifact.artifactId}-${artifact.version}${dashClassifier}.${artifact.extension}
    </outputFileNameMapping>
    <includes>
      <include>com.example.data:database-access</include>
    </includes>
    <types>jar</types>
  </dependencySet>

  <!-- 处理POM文件 -->
  <dependencySet>
    <useProjectArtifact>false</useProjectArtifact>
    <outputFileNameMapping>
      ${artifact.groupIdPath}/${artifact.artifactId}/${artifact.version}/${artifact.artifactId}-${artifact.version}${dashClassifier}.${artifact.extension}
    </outputFileNameMapping>
    <includes>
      <include>com.example.data:database-access</include>
    </includes>
    <types>pom</types>
    <scope>runtime</scope> <!-- 确保能匹配到POM的依赖范围 -->
  </dependencySet>
</dependencySets>

这种方式的好处是可以分别对JAR和POM设置不同的输出规则,比如如果需要把POM放到单独的目录,只修改第二个dependencySet的<outputDirectory>即可。

另外如果有大量依赖需要统一处理,你可以把<include>改成更通用的规则,比如com.example.data:*或者*:*,再配合<excludes>排除不需要的构件就行。

我当时用第一种方法就快速解决了问题,你可以根据自己的实际配置情况选一个试试!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 10:24:35