VSCode中Maven项目用json-simple运行Java报NoClassDefFoundError如何解决
这个报错属于典型的运行时类路径缺失依赖问题:你代码编译阶段能找到json-simple/gson的类,但是运行的时候JVM没加载到对应依赖的jar包,和JDK环境、代码逻辑本身无关。
第一步:核对pom.xml依赖配置
确保依赖放在下的 标签内,不要误写在 或者其他父标签里,正确的json-simple依赖示例如下: <dependencies> <!-- json-simple依赖 --> <dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1.1</version> </dependency> </dependencies>如果用gson,对应依赖为:
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.10.1</version> </dependency>第二步:强制同步Maven依赖
打开VSCode终端,切换到项目根目录(pom.xml所在目录),执行命令:mvn clean install -U
加-U参数会强制更新快照依赖,避免本地缓存的依赖包损坏导致的问题。如果执行过程中出现依赖下载失败的报错,需要修改Maven的镜像源为国内源,修改本地Maven安装目录下conf/settings.xml的标签,添加阿里云镜像: <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>第三步:刷新VSCode项目识别
按快捷键Ctrl+Shift+P(Mac为Command+Shift+P)调出命令面板,执行Java: Reload Projects命令,刷新后查看VSCode侧边栏「Java Projects」面板的「External Libraries」目录,确认能看到你引入的json-simple/gson的jar包。第四步:调整运行方式
不要直接点击代码编辑区上方的「Run」按钮运行,改用Maven插件执行,先在pom.xml的标签内添加exec运行插件: <build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.1.0</version> <configuration> <mainClass>pandemic.Game</mainClass> </configuration> </plugin> </plugins> </build>后续运行直接在终端执行命令:
mvn exec:java
该命令会自动把所有Maven依赖加载到运行时类路径,不会出现缺类问题。第五步:打包运行场景的额外配置
如果你是将项目打包为jar包后运行报错,需要添加打包插件把依赖一起打进jar包,在里添加assembly插件: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.4.2</version> <configuration> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <mainClass>pandemic.Game</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin>执行
mvn package后,target目录下会生成带jar-with-dependencies后缀的jar包,运行该包即可:java -jar target/你的项目名-版本号-jar-with-dependencies.jar
内容的提问来源于stack exchange,提问作者Bunnyrabbit

