迁移工作空间后出现java.lang.NoClassDefFoundError问题求助
这种运行时找不到类的问题我碰到过好多次,结合你用Eclipse+Maven的场景,咱们一步步来排查解决:
先确认Maven依赖是否正常导入
首先右键项目 →Maven→Update Project,勾选Force Update of Snapshots/Releases后点击确定。复制过来的项目经常会因为依赖缓存问题导致某些jar包没拉全,强制更新大概率能解决一部分问题。
另外打开项目的pom.xml,检查是否存在de.gas.toolbox相关的依赖项,要确保groupId、artifactId、version都正确,而且依赖范围不是provided或test——这两个范围会让依赖只在编译/测试阶段生效,运行时就会找不到类。检查Eclipse的编译路径配置
右键项目 →Properties→Java Build Path→Libraries标签页,查看Maven Dependencies下面有没有Utils所在的jar包。如果没有,先在项目根目录执行mvn clean install(可以用Eclipse自带的Terminal或者外部命令行),完成后再重新更新Maven项目。
还要确认Output Folder是否设置正确(默认是target/classes),如果Utils是你本地项目里的类,要确保这个目录下有编译好的Utils.class文件。确认Utils类的归属情况
如果Utils是同一个工作空间里的另一个本地项目,那得检查当前项目是否正确引用了它:右键当前项目 →Properties→Java Build Path→Projects标签页,看看有没有添加那个包含Utils的项目作为依赖,同时要确保那个项目已经正常编译,target/classes里有对应的class文件。
如果Utils是一个本地jar包,建议把它安装到本地Maven仓库,命令如下:mvn install:install-file -Dfile=你的jar文件路径.jar -DgroupId=de.gas.toolbox -DartifactId=toolbox -Dversion=1.0.0 -Dpackaging=jar之后再在pom.xml里添加对应的依赖,这样Eclipse就能正确识别这个jar包了。
清理并重新编译整个项目
先执行mvn clean命令清理掉target目录下的旧编译文件,接着执行mvn compile或者mvn package确保编译过程没有报错。
同时在Eclipse里点击Project→Clean,选择当前项目进行清理,之后重新编译,避免旧的编译残留导致冲突。检查Vert.x的启动配置
因为是Verticle启动时出错,还要确认Vert.x的部署方式是否正确。如果是用Maven的exec插件启动,要确保插件配置里包含了所有必要的依赖;更省心的方式是直接用mvn vertx:run命令启动,Maven会自动帮你处理好classpath的问题。
内容的提问来源于stack exchange,提问作者J_D

