我有以下代码:
package mypackage;
import mypackage.MainClass;
public class Launcher
{
public static void main(String[] args)
{
new MainClass(args);
}
}
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文件 - 但我已经非常清楚地完成只是)。
发生了什么?
答案 0 :(得分:0)
... 使用此选项时,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位置的位置。