运行Java主类遇NoClassDefFoundError(org/apache/commons/cli/ParseException)如何解决?
解决方法
问题根源:你给commons-cli依赖加了
<scope>provided</scope>,这个作用域意味着编译时会用到这个依赖,但运行时不会把它打包进项目,所以运行时JVM找不到对应的类,就抛出了NoClassDefFoundError。具体修复步骤:
- 把所有pom.xml里的commons-cli依赖中的
<scope>provided</scope>删掉,修改后的依赖代码如下:<dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.2</version> </dependency> - 因为是多模块项目,务必确认你运行的主类所在模块的pom也做了这个修改,别漏了。
- 执行Maven命令清理重建,确保依赖生效:
mvn clean install - 如果用IDE运行,记得刷新Maven依赖(比如IntelliJ点Maven窗口的刷新按钮,Eclipse选Maven -> Update Project),避免IDE用旧缓存。
- 把所有pom.xml里的commons-cli依赖中的
特殊情况:如果你的运行环境(比如应用服务器)本该提供这个依赖,但实际没部署,那要么在环境里手动添加commons-cli的jar包,要么还是按上面的方法去掉provided scope,让项目自己携带依赖。
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

