Maven Ear Plugin 2.7打包缺失XmlStreamWriter类如何指定plexus-utils版本
问题根因
maven-ear-plugin 2.7默认引入的传递依赖plexus-utils版本为1.1,该版本未打包org.codehaus.plexus.util.xml.XmlStreamWriter类,插件执行generate-application-xml生命周期目标时找不到对应类,直接触发构建失败。
报错信息如下:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-ear-plugin:2.7:generate-application-xml (default-generate-application-xml) on project PROJECT_NAME: Execution default-generate-application-xml of goal org.apache.maven.plugins:maven-ear-plugin:2.7:generate-application-xml failed: A required class was missing while executing org.apache.maven.plugins:maven-ear-plugin:2.7:generate-application-xml: org/codehaus/plexus/util/xml/XmlStreamWriter
解决方法
直接在maven-ear-plugin的配置中显式声明plexus-utils依赖,强制覆盖插件默认的低版本传递依赖,不需要升级maven-ear-plugin本身,适配旧版Maven、Java环境约束。
- 选择的plexus-utils版本需要满足两个条件:包含缺失的XmlStreamWriter类、兼容当前运行的旧版JDK与Maven,推荐使用
3.0.24版本,该版本支持JDK 1.5及以上,无额外高版本依赖要求。
修改后的maven-ear-plugin配置如下:
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ear-plugin</artifactId> <version>2.7</version> <!-- 新增插件依赖配置,强制指定plexus-utils版本 --> <dependencies> <dependency> <groupId>org.codehaus.plexus</groupId> <artifactId>plexus-utils</artifactId> <version>3.0.24</version> </dependency> </dependencies> <configuration> <finalName>PROJECT_NAME</finalName> <displayName>PROJECT_NAME</displayName> <modules> <webModule> <groupId>some.group</groupId> <artifactId>some.artifact</artifactId> <bundleFileName>PROJECT_NAME_01.war</bundleFileName> <contextRoot>/PROJECT_NAME_01</contextRoot> </webModule> </modules> </configuration> </plugin> </plugins> </build>
验证方式
配置完成后可执行以下命令查看插件的依赖树,确认plexus-utils版本已替换为指定版本:
mvn dependency:tree -DgroupId=org.apache.maven.plugins -DartifactId=maven-ear-plugin
确认版本无误后再执行ear打包命令即可正常构建。
内容的提问来源于stack exchange,提问作者Nacho Escursell
相关产品推荐
相关产品推荐

