使用Apache Maven Wrapper插件更新自身时抛出进程占用错误
Apache内置Maven Wrapper 迁移问题与更新说明
问题场景
- 之前一直使用Takari Maven Wrapper,该工具运行正常至今,对应命令:
mvnw -N io.takari:maven:wrapper -Dmaven=3.9.5 - 得知Takari方式已被弃用,改用Apache官方内置的Wrapper命令:
mvnw wrapper:wrapper -Dmaven=3.9.5 - 执行后触发文件占用错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-wrapper-plugin:3.2.0:wrapper (default-cli) on project demo: xxx\demo\demo\.mvn\wrapper\maven-wrapper.jar: The process cannot access the file because it is being used by another process -> [Help 1]
错误解决:文件占用问题
- 先检查是否有其他进程在占用
maven-wrapper.jar:比如IDE的Maven后台进程、未关闭的终端Maven会话,全部关闭后重新执行命令即可。 - 找不到占用进程的话,用系统工具定位:
- Windows:打开「资源监视器」,搜索文件名找到对应进程结束
- Linux/macOS:执行
lsof | grep maven-wrapper.jar拿到进程ID,再用kill <PID>结束
关于Apache Wrapper的更新与意义
更新方法
Apache内置Wrapper是支持自更新的,只是和Takari的实现逻辑不同,可选方式:
- 用现有Wrapper更新:确保无进程占用的前提下,指定Wrapper版本执行命令:
mvnw wrapper:wrapper -Dmaven-wrapper.version=3.2.0 -Dmaven=3.9.5 - 手动修改配置:直接编辑
.mvn/wrapper/maven-wrapper.properties文件,修改distributionUrl(Maven版本)和wrapperVersion(Wrapper版本),下次执行mvnw会自动下载更新包。 - 借助本地Maven:如果本地装了Maven,直接用
mvn wrapper:wrapper命令生成/更新Wrapper,绕开文件占用问题。
内置版本的意义
- 完全集成进Apache Maven生态,无需依赖第三方组件,后续维护由官方统一负责,兼容性和稳定性更有保障。
- 标准化了Wrapper的使用方式,避免不同项目因用不同Wrapper实现产生的差异。
- 所谓“无法自更新”只是因为文件被占用导致的执行失败,并非功能缺失,调整执行环境就能正常更新。
内容的提问来源于stack exchange,提问作者SledgeHammer
相关产品推荐
相关产品推荐

