我正在编写一个在远程Oracle实例上执行短任务的简短实用程序。该实用程序使用ojdbc6.jar中的Oracle jdbc驱动程序。
Oracle jar正确地包含在我的类路径中。当我将项目导出到jar并使用“java -jar”在命令行上运行jar时,我得到:
Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.Class.forName0(Native Method)
将Oracle jar移动到与runnable jar文件相同的目录后,我更改了我的Manifest文件以在类路径中包含Oracle jar。这解决了问题,我的罐子运行正常。
任何人都可以解释为什么在我的类路径中包含Oracle jar无法解决问题,以及为什么编辑Manifest文件呢?
谢谢!
答案 0 :(得分:4)
来自java -jar
命令的Sun(Oracle)文档:
执行封装在JAR文件中的程序。第一个论点是 JAR文件的名称而不是启动类名称。为了 要使用此选项,JAR文件的清单必须包含一行 Main-Class形式:classname。这里,classname标识了 类具有public static void main(String [] args)方法 作为您的应用程序的起点。请参阅Jar工具 参考页面和Java Tutorial的Jar跟踪信息 关于使用Jar文件和Jar文件清单。 当你使用它时 选项,JAR文件是所有用户类和其他用户的源 类路径设置被忽略。