使用Paths类时可执行Jar出现NoClassDefFoundError问题
解决导出可执行Jar时的NoClassDefFoundError(Paths类相关)
嘿,我来帮你捋清楚这个问题——你遇到的错误本质上是对rt.jar的定位搞错了,咱们一步步解决:
首先明确一个关键:rt.jar是JRE的核心运行时库,绝对不应该被打包到你自己的可执行Jar里。Paths类属于java.nio.file包,本身就是JRE标准API的一部分,每个正常安装的Java环境都会自带这个类,根本不需要你手动把rt.jar加入类路径。
你现在出现错误的原因大概率是这几个情况:
- 开发时错误地把rt.jar当成第三方依赖添加了,但导出时没打包(其实这步是对的,不该打包),但运行Jar的环境Java版本太低,或者JRE配置有问题,导致找不到标准的Paths类;
- 或者导出可执行Jar时的配置有问题,比如主类指定错误,或者自己的代码依赖处理遗漏,但如果报错明确是Paths类,那前者的可能性更大。
给你几个具体的解决步骤:
移除手动添加的rt.jar依赖
赶紧从项目的类路径里删掉rt.jar,它是JRE自带的,完全不需要额外引入。如果用Maven/Gradle,检查依赖配置里有没有错误添加的rt.jar相关条目,直接移除就行。确认运行环境的Java版本
Paths是从Java 7开始才有的类,所以你运行Jar的环境必须安装Java 7或更高版本。打开命令行输入java -version,确认版本符合要求——要是用了Java 6或更早的版本,肯定会找不到这个类。正确导出可执行Jar
如果你用IDE(比如IntelliJ或Eclipse):- 导出时一定要选对包含
main方法的主类; - 选择“复制所需的第三方库到Jar所在文件夹”或者“将第三方库打包到Jar中”(注意这里只打包你自己用到的非JRE自带的依赖,别碰rt.jar);
- 要是用Maven的shade插件或者Gradle的shadow插件打包,确保配置只打包你的代码和第三方依赖,JRE的标准类库会自动由运行环境提供。
- 导出时一定要选对包含
举个Maven shade插件的正确配置示例(只处理你的代码和第三方依赖):
<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.yourpackage.YourMainClass</mainClass> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
- 用命令行测试运行
导出Jar后,打开命令行执行java -jar 你的Jar文件名.jar,如果还是报错,仔细看错误信息里的具体类名——如果还是Paths类,那百分百是运行环境的JRE有问题,比如版本过低、安装损坏;如果是你自己的类,那就是打包时遗漏了代码或者依赖。
总结一下,核心就是:rt.jar是JRE自带的,不需要打包,问题要么出在运行环境的Java版本不对,要么是打包配置没处理好自己的依赖。
内容的提问来源于stack exchange,提问作者Darksmilie
相关产品推荐
相关产品推荐

