Maven引入org.json依赖运行时出现NoClassDefFoundError求助
嗨,刚看到这个问题,我之前也踩过一模一样的坑!先给后来遇到这个问题的小伙伴梳理下原因和解决办法:
关于Maven引入org.json后运行报NoClassDefFoundError的解决思路
首先,mvn package正常但运行报错,核心原因基本都是依赖没被正确放到运行时的类路径里——毕竟Maven默认打包只会包含你自己的代码,不会自动把依赖包塞进去。
几个靠谱的解决办法
先确认依赖scope没写错
别把scope设成provided或者test!这俩都会让Maven在打包时跳过这个依赖。正确的依赖配置应该是这样的:<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20231013</version> <!-- 建议用最新的稳定版本 --> <!-- 要么不写scope(默认就是compile),要么明确写<scope>compile</scope> --> </dependency>打包成「胖JAR」(最推荐)
如果你的项目是要生成可直接运行的JAR,一定要用Maven插件把依赖一起打包进去。我常用maven-shade-plugin,配置起来很简单:
在pom.xml的<build>标签里加这段插件配置:<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-shade-plugin</artifactId> <version>3.5.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.yourpackage.YourMainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins>然后执行
mvn clean package,去target目录找带-jar-with-dependencies后缀的JAR,用java -jar运行它,就不会再报找不到类的错误了。临时方案:运行时手动指定类路径
如果只是临时测试不想改打包配置,运行的时候可以手动把org.json的JAR加到类路径里:java -cp target/你的项目名.jar:~/.m2/repository/org/json/json/20231013/json-20231013.jar com.yourpackage.YourMainClass不过这个方式每次运行都要敲一大串,不适合长期用。
看你说已经找到解决办法啦,估计大概率是用了胖JAR的方案吧😆
内容的提问来源于stack exchange,提问作者olaven
相关产品推荐
相关产品推荐

