MySQL 驱动程序 class 未找到,即使包含在 class 路径中也是如此

MySQL driver class not found, even when included in classpath

我有以下代码:

mypackage\Launcher.java:

package mypackage;

import mypackage.MainClass;

public class Launcher
{
    public static void main(String[] args)
    {
        new MainClass(args);
    }
}

mypackage\MainClass.java:

package mypackage;

import java.sql.*;
import com.mysql.jdbc.Driver;

public class MainClass
{
    public MainClass(String[] args)
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
        }
        catch (Exception ex)
        {
            System.err.println("Error: unable to load sql driver class!");
            ex.printStackTrace(System.err);
            System.exit(1);
        }

        System.out.println("We got here... How???");
    }
}

使用

编译代码没有任何抱怨
javac -cp src;bin;lib\mysql-connector-java-5.1.38-bin.jar -sourcepath src -d bin src\mypackage\Launcher.java
jar cfe myjar.jar mypackage.Launcher .

但是当 运行

java -cp .\mysql-connector-java-5.1.38-bin.jar -jar myjar.jar

我收到以下错误:

Error: unable to load sql driver class!
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at mypackage.MainClass.<init>(MainClass.java:10)
        at mypackage.Launcher.main(Launcher.java:9)

我不明白我在这里遗漏了什么,我花了 6 个多小时尝试调试和搜索答案,但我没有找到 任何 有帮助的东西(我发现的几乎所有内容都说“在 class 路径上包括包含 class 的 jarfile – 但我已经非常清楚地完成了 只是 )。

怎么回事?

-jar option

... When you use this option, the JAR file is the source of all user classes, and other user class path settings are ignored.

启动它的最快方法是删除 -jar 选项,将您的 jar 添加到 -cp 列表并使用 mypackage.MainClass 作为最后一个 CLI 参数。
(以防万一你不知道)但只有 之后你在 class 中实现了 public static void main(String[] args) 方法(不,事实上你的 class 有构造函数没关系)

保持 -jar 启动风格的方法是将所有依赖 jar 文件枚举到主 jar 的 Class-Path entry of the manifest.mf file 中(也包含 Main-Class 条目指向你的启动器)。
请注意您期望依赖项相对于启动器 jar 位置的位置。