0

我在 jar 文件中有一个令牌类文件。令牌类文件是使用 jdbc 从数据库中检索数据的类。但是,当我调用 jar 文件时,它似乎无法识别外部 mysql 驱动程序 jar 文件。

错误指向这一行 Class.forName(driver);。

我已经在 ant 构建文件和我能想到的每个类路径中引用了 mysql 驱动程序。

    <mkdir dir="build/server/dist"/>
    <jar destfile="build/server/dist/VNCOverHTTPServer.jar" basedir="build/server/classes">
        <manifest>
            <attribute name="Main-Class" value="jhttpserver.JHttpServer"/>
            <attribute name="Class-path" value="lib/servlet.jar lib/mysql-connector-java-5.1.7-bin.jar config/"/>
        </manifest>
    </jar>

没有任何工作?任何帮助,将不胜感激。

谢谢

java.lang.ClassNotFoundException:java.net.URLClassLoader.findClass(URLClassLoader.java:188) 的 java.security.AccessController.doPrivileged(Native Method) 的 java.net.URLClassLoader$1.run(URLClassLoader.java:200) 的 mysql在 java.lang.ClassLoader.loadClass(ClassLoader.java:316) 在 sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:288) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:251) 在 java。 lang.ClassLoader.loadClassInternal(ClassLoader.java:374) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at socksviahttp.server.token.getConnection(token. java:58) 在 socksviahttp.server.token.exists(token.java:75) 在 socksviahttp.server.ServletSocks.doPost(ServletSocks.java:328) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:760 ) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:853) 在 jhttpserver.JHttpServerThread.run(JHttpServerThread.java:217)

4

2 回答 2

1

注册 mysql 驱动程序的行大致如下:

Class.forname("com.mysql.jdbc.Driver");

类加载器错误似乎是针对一个朴素的“mysql”类,而不是包引用的类。通常只有在动态加载类而不指定完整的类名时才会看到此错误。

你用什么来加载mysql驱动类?如果它是一个弹簧配置文件,那么您可能在配置文件中没有完整的类名。

我刚刚注意到小写的“类路径”。它应该是“类路径”

于 2009-05-05T12:16:29.933 回答
0

当您运行 jar 文件时,可以通过双击它或从命令行运行):

java -jar VNCOverHTTPServer.jar

然后在您的 jar 所在的目录中,应该有一个包含所需 jar 的 lib 文件夹。是这样吗?

更新:从您的错误报告中可以明显看出您正在使用 URLClassLoader 加载 mysql 类。在类路径中添加 jar 文件无济于事,您需要通过 URL 链接使该类可用。

于 2009-05-05T11:31:00.510 回答