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

Maven Java项目NetBeans运行正常,打包JAR后报ClassNotFoundException求助

问题原因

你打包出的JAR只包含自身项目代码,Maven默认不会将runtime等scope的依赖包(比如MySQL驱动、AbsoluteLayout这类)打包进去。NetBeans运行时会自动把所有依赖加入类路径,所以能正常执行;但单独运行JAR时,JVM找不到这些依赖类,就会抛出ClassNotFoundException或“找不到JDBC驱动”的错误。

解决方案

下面提供三种可行方案,任选其一即可:

方法一:用maven-assembly-plugin打包含所有依赖的胖JAR

修改你的pom.xml,在<build><plugins>节点内添加以下插件配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>NIS.NIS</mainClass> <!-- 与你原配置的主类保持一致 -->
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

配置完成后,在NetBeans中执行clean和package命令,打包完成后,target目录会生成两个JAR文件:一个是原有的轻量JAR,另一个是带-jar-with-dependencies后缀的胖JAR,直接运行这个胖JAR即可。

方法二:用maven-shade-plugin打包(灵活性更高)

如果assembly插件无法满足需求,可改用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>NIS.NIS</mainClass>
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>

执行package命令后,target目录下的主JAR就是包含所有依赖的可执行JAR,直接运行即可。

方法三:手动指定类路径运行原JAR

若不想打包胖JAR,可将所有依赖包(含MySQL驱动)统一放到一个lib目录,再通过命令行指定类路径运行:

  1. 先执行mvn dependency:copy-dependencies,将所有依赖复制到target/dependency目录
  2. 将原JAR和dependency目录放在同一位置,执行以下命令:
java -cp "你的JAR文件名.jar:./dependency/*" NIS.NIS

注意:Windows系统需将冒号:替换为分号;

额外提示

你pom.xml里的unknown-jars-temp-repo是NetBeans自动生成的临时仓库,建议将AbsoluteLayout和jcalendar-1.4替换为Maven中央仓库可找到的正式依赖,避免后续构建或打包出问题。比如jcalendar可改用中央仓库的依赖:

<dependency>
    <groupId>com.toedter</groupId>
    <artifactId>jcalendar</artifactId>
    <version>1.4</version>
</dependency>

内容的提问来源于stack exchange,提问作者mohamed boulaoudja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 15:55:57