JDK16下JavaFX含mssql-jdbc依赖JAR执行报类找不到异常
解决JDK16下JavaFX带依赖打包可运行JAR的问题
问题核心
你碰到的ClassNotFoundException本质是IntelliJ的Artifact配置有误——要么主类未正确指定,要么JAR的MANIFEST.MF缺少主类定义、依赖路径配置,和代码逻辑无关。
修正IntelliJ打包配置步骤
1. 重置并重新配置Artifact
- 打开
File → Project Structure → Artifacts,删除之前创建的旧Artifact - 点击
+ → Jar → From modules with dependencies...- 弹出窗口中精准选择入口主类:选你用来构建的类2(调用JavaFX主类的那个类)的全限定名(比如
sample.Class2),别选错成JavaFX的Application类 - 点
OK后,在Artifact配置界面的Output Layout下,找到Available Elements,把mssql-jdbc-9.4.1.jre16.jar添加到新建的lib目录(右键JAR名称→New→Directory创建lib)
- 弹出窗口中精准选择入口主类:选你用来构建的类2(调用JavaFX主类的那个类)的全限定名(比如
2. 配置MANIFEST.MF文件
- 在Artifact配置界面,点击
Manifest file右侧的...,把MANIFEST文件生成路径指定到src/main/resources/META-INF(没有这个目录就提前创建) - 打开
MANIFEST.MF,手动添加或确认以下内容:
注:如果选择把依赖直接打包进主JAR(右键依赖JAR选Main-Class: sample.Class2 # 替换成你实际入口类的全限定名 Class-Path: lib/mssql-jdbc-9.4.1.jre16.jarExtract into output root),则无需Class-Path配置,但JavaFX模块不建议解压打包,更推荐依赖放在外部lib目录的方式。
3. 删除错误添加的SDK内容
之前你添加了SDK的bin内容,这完全没必要——SDK的bin是系统可执行文件,不属于JAR依赖,必须删除:
- 在Artifact的
Output Layout里,删掉所有来自SDK bin的内容,只保留项目编译后的class文件和mssql-jdbc依赖。
4. 重新构建Artifact
- 回到
Artifacts界面,点击Build → Build Artifacts → [你的Artifact名称] → Build - 构建完成后,若用外部依赖方式,确保JAR同目录下有lib文件夹,且里面放好mssql-jdbc的JAR文件。
运行验证
打开命令行,进入JAR所在目录,执行:
java -jar 你的Artifact名称.jar
额外注意事项
- JDK11之后JavaFX是独立模块,要确保IntelliJ已正确识别JavaFX SDK:在
Project Structure → Libraries中添加javafx-sdk的lib目录,再在Modules → Dependencies中添加所需的JavaFX模块(比如javafx-controls、javafx-fxml) - 不要依赖系统的CLASSPATH环境变量,打包后的JAR依赖完全通过
MANIFEST.MF管理,避免冲突。
内容的提问来源于stack exchange,提问作者Bart
相关产品推荐
相关产品推荐

