NetBeans中执行org.apache.maven.plugins:maven-war-plugin目标报错如何解决?
问题触发原因
- 插件版本不兼容:
maven-war-plugin 2.3是老旧版本,和当前使用的JDK版本、Maven核心版本存在兼容性冲突,比如JDK 8及以上版本和该旧版插件的打包逻辑不兼容,或是NetBeans内置的Maven版本高于3.3.1时也会触发兼容问题。 - web资源配置错误:pom.xml中未正确配置
<webResources>、<webXml>节点,或是默认的src/main/webapp/WEB-INF/web.xml文件缺失、格式错误,插件找不到合法的web配置文件就会执行失败。 - 依赖冲突:项目中引入的Servlet、JSP等web相关依赖的scope设置错误,比如将scope设为
compile而非provided,打包时重复引入容器自带的依赖导致打包冲突。 - 本地Maven缓存损坏:该插件对应的本地缓存文件损坏,导致执行时加载失败。
- 输出目录权限不足:Maven打包要写入的
target目录被其他程序占用,或是当前用户没有该目录的写入权限。
可行解决办法
- 升级maven-war-plugin版本:在pom.xml的
<build><plugins>节点下添加高版本插件配置,示例配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> <!-- 不需要web.xml的项目可开启该配置 --> </configuration> </plugin>
- 修正web资源配置:如果项目需要web.xml,确认
src/main/webapp/WEB-INF/web.xml文件存在且格式合法;如果是Spring Boot等不需要web.xml的项目,在插件配置中添加<failOnMissingWebXml>false</failOnMissingWebXml>关闭检查。 - 修正web相关依赖的scope:将Servlet、Tomcat嵌入式依赖等的scope设置为
provided,示例如下:
<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> <scope>provided</scope> </dependency>
- 清理本地Maven缓存:删除本地仓库中
org/apache/maven/plugins/maven-war-plugin目录下的2.3版本文件夹,重新执行构建让Maven自动下载完整的插件文件。 - 清理项目构建缓存:在NetBeans中右键项目选择
Clean and Build,或是在项目根目录执行mvn clean package命令,手动删除被占用的target目录后重新构建。
内容的提问来源于stack exchange,提问作者Yasir Siddiqui
相关产品推荐
相关产品推荐

