You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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. 配置MANIFEST.MF文件

  • 在Artifact配置界面,点击Manifest file右侧的...,把MANIFEST文件生成路径指定到src/main/resources/META-INF(没有这个目录就提前创建)
  • 打开MANIFEST.MF,手动添加或确认以下内容:
    Main-Class: sample.Class2  # 替换成你实际入口类的全限定名
    Class-Path: lib/mssql-jdbc-9.4.1.jre16.jar
    
    注:如果选择把依赖直接打包进主JAR(右键依赖JAR选Extract 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:43:16