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

时间:2016-10-20 03:18:54

标签: java mysql jar classnotfoundexception

我有以下代码:

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个多小时试图调试和搜索答案,但我还没有找到任何有帮助的东西(几乎没有我发现的所有内容都说明了#34;包含类路径中包含类的jar文件 - 但我已经非常清楚地完成只是)。

发生了什么?

1 个答案:

答案 0 :(得分:0)

-jar option

  

...   使用此选项时,JAR文件是所有用户类的源,并忽略其他用户类路径设置。

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

维护-jar启动样式的方法是将所有依赖jar文件枚举到主jar的Class-Path entry of the manifest.mf file中(还包含指向启动器的Main-Class条目的jar文件)。
请注意您希望您的依赖关系相对于启动器jar位置的位置。