使用maven-assembly-plugin打包带依赖可执行jar时Maven编译报错
问题解决方法
错误根因
你构建时的报错是因为maven-assembly-plugin在处理依赖传递引入的maven-cobertura-plugin:plugin:1.3构件时,无法识别.plugin后缀的归档格式,导致构建终止。你当前使用的2.2-beta-5版本的assembly插件本身版本过旧,对特殊类型依赖的兼容性也较差。
解决步骤
- 步骤1:升级maven-assembly-plugin到稳定版本
在pom中maven-assembly-plugin的配置内补充版本号,推荐使用3.6.0稳定版:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.6.0</version> <!-- 原有其他配置保留 --> </plugin> - 步骤2:添加依赖类型过滤规则
在assembly插件的configuration节点下新增依赖集过滤配置,仅打包jar类型的依赖,自动过滤plugin、pom等非可执行构件:<configuration> <!-- 原有archive、descriptorRefs、finalName配置全部保留 --> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <useProjectArtifact>true</useProjectArtifact> <unpack>true</unpack> <scope>runtime</scope> <includes> <include>*:jar:*</include> </includes> </dependencySet> </dependencySets> </configuration> - 步骤3:重新执行构建
运行mvn clean package即可正常生成包含所有依赖的单可执行jar文件。
可选替代方案
如果调整后仍有依赖冲突问题,可替换为maven-shade-plugin完成单jar打包,该插件对复杂依赖场景的兼容性优于assembly插件,示例配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.klccomputing.sses.expectedResults.ExpectedResults</mainClass> </transformer> </transformers> <finalName>ExpectedResults</finalName> </configuration> </execution> </executions> </plugin>
内容的提问来源于stack exchange,提问作者Kendall Crouch
相关产品推荐
相关产品推荐

