升级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
相关产品推荐
相关产品推荐

