为什么编辑Manifest文件提供了CLASSPATH没有的解决方案

时间:2011-11-14 23:07:04

标签: java classpath manifest

我正在编写一个在远程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文件呢?

谢谢!

1 个答案:

答案 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文件是所有用户类和其他用户的源   类路径设置被忽略