生产环境部署Jar遇NoClassDefFoundError: org/json/JSONArray问题求助
解决java.lang.NoClassDefFoundError: org/json/JSONArray问题
这个错误的核心是运行时找不到org.json相关类——本地编译正常说明编译期依赖没问题,但打包后的Jar在生产环境运行时缺了这个依赖。下面是针对性的解决方案:
1. 检查pom.xml里的依赖scope
确认org.json的依赖没被设置成test或provided,这两个scope会导致打包时不把依赖打进Jar。正常的依赖配置应该是这样:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>你的具体版本号</version> <!-- 别加scope=test/provided --> </dependency>
2. 打包时把依赖打进Jar
如果是打包成可执行Jar,必须确保依赖被包含进去,推荐用Maven Shade插件:
在pom.xml的build/plugins里添加以下配置:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.4.1</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>你的主类全路径(比如com.example.MyApp)</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin>
之后执行mvn clean package,生成的带shade后缀的Jar就是包含所有依赖的可执行Jar。
3. 检查生产环境的运行类路径
如果是部署到服务器(比如Tomcat):
- 要是用独立Jar运行,确保Jar里包含org.json类;
- 要是分开部署依赖,把org.json的Jar放到服务器的类路径目录(比如Tomcat的
WEB-INF/lib),或者运行时用-cp参数指定依赖路径,比如:java -cp your-app.jar:json.jar com.example.MyApp
4. 验证打包后的Jar内容
用命令检查Jar里有没有org.json的类:
jar tf your-app.jar | grep org/json/JSONArray
如果没输出,说明依赖没被打进Jar,回头重新检查打包配置。
5. 修复本地Maven仓库的依赖
删除本地Maven仓库里的org/json缓存目录(比如~/.m2/repository/org/json),然后执行mvn clean install重新下载依赖,避免本地依赖文件损坏导致打包异常。
内容的提问来源于stack exchange,提问作者Satyajit
相关产品推荐
相关产品推荐

