Java忽略了类路径

fer*_*dyh 12 java oracle jdbc

我正在编写一个使用Oracle JDBC驱动程序的java程序.我已经在我的类路径中设置了它.当我在IDE中运行程序(作为jdbc添加为库)时,程序运行正常.当我尝试部署它时,它总是忽略类路径中的列表并给我一个NoClassDefFoundError.

我想使用客户端的JDBC驱动程序(已安装的驱动程序)并且不提供我自己的驱动程序.我从JDeveloper打包程序,部署为JAR File.

运行:java -jar test.jar

当我将库放在%JAVA_HOME%/ lib/ext中时,它可以正常工作.

有谁知道如何解决这个问题?

Mik*_*uel 29

运行时java -jar,将忽略类路径.

您需要使用Class-Pathmanifest属性.

来自http://download.oracle.com/javase/tutorial/deployment/jar/downman.html

您可以指定要包含在applet或应用程序的清单文件中的Class-Path头字段中的类.Class-Path标头采用以下形式:

Class-Path: jar1-name jar2-name directory-name/jar3-name

来自http://download.oracle.com/javase/1.4.2/docs/tooldocs/linux/java.html

-罐

...

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

  • 是的,但是有什么方法呢? (2认同)
  • @Joachim Sauer:在我看来,如果你必须使用URLClassLoader手动加载它,那么完全胜过拥有类路径的目的......然后你必须知道要包含的jar的位置,而不是JVM为你解决这个问题...而Class-Path并没有看到它自己舒适的项目文件夹之外; 所以我必须要求用户提供JDBC驱动程序的位置?问题是我们不知道用户拥有哪个版本的Oracle数据库.从类路径加载它可以为用户提供兼容版本(通常随数据库提供)的优势. (2认同)
  • @Ferdy:我现在不想讨论这个设计决定的哲学含义.它就是这样,我们必须用它来做.请注意,您的方法也存在严重缺陷:您假设运行Java代码的计算机安装了Oracle数据库(或至少是JDBC驱动程序).这不一定是真的,为什么Java客户端不能连接到远程数据库? (2认同)