Java忽略类路径

Java忽略类路径,java,oracle,jdbc,Java,Oracle,Jdbc,我正在编写一个使用OracleJDBC驱动程序的java程序。我已经在我的类路径中设置了它。当我在IDE中运行程序时(添加为jdbc作为库),程序运行良好。当我尝试部署它时,它完全忽略了类路径中的列表,并给我一个NoClassDefFoundError 我想使用客户机的JDBC驱动程序(已安装的驱动程序),但不提供我自己的驱动程序。我将程序从JDeveloper打包,部署为JAR文件 运行:java-jartest.jar 当我将库放在%JAVA\u HOME%/lib/ext中时,它工作正常

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

我想使用客户机的JDBC驱动程序(已安装的驱动程序),但不提供我自己的驱动程序。我将程序从JDeveloper打包,部署为JAR文件

运行:java-jartest.jar

当我将库放在%JAVA\u HOME%/lib/ext中时,它工作正常


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

当您使用
java-jar运行时,类路径被忽略

您需要使用
类路径
清单属性

指定要包含在小程序或应用程序清单文件的类路径头字段中的类。类路径头采用以下形式:

类路径:jar1名称jar2名称目录名称/jar3名称

-jar

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


你能告诉我们你是如何在命令行上运行这个文件的吗?你到底是如何部署它的?如何包装?你是如何启动它的?注意,如果您使用的是
-jar
开关,那么在命令行和环境变量中指定的任何类路径都将被忽略。只有清单的
类路径
属性才相关。那么,如何设置类路径,使其在我的环境类路径中显示?或者我可以运行java-jar以外的jar吗?只需将应用程序提供给jar即可。它是完全有效的。@Nishant也许是,但是java有一个类路径,oracle的安装程序在每次安装时都提供一个工作的jdbc。我们倾向于从类路径使用已经安装好的jdbc。+1这里有一个方便的方法可以就地查看JAR的清单。但是我想从当前环境的类路径使用JAR,而不是将其包含在我的项目中。在使用
-jar
函数时,难道不可能从类路径使用jar吗?您总是可以使用自己的类路径创建自己的类加载器。请参阅@Joachim Sauer:在我看来,如果必须使用URLClassLoader手动加载类路径,那么这完全超出了创建类路径的目的。。。然后,您必须知道要包含的jar的位置,而不是JVM为您解决这个问题。。。并且类路径不在它自己的comfy项目文件夹之外;所以我必须向用户询问JDBC驱动程序的位置?问题是我们不知道用户使用的是哪个版本的Oracle数据库。从类路径加载它给了我们一个优势,用户可以得到一个兼容的版本(通常随数据库提供)。@Ferdy:我现在不想讨论这个设计决策的哲学含义。就这样,我们只好将就一下。请注意,您的方法还有一个严重的缺点:您假设在运行Java代码的机器上安装了Oracle数据库(或者至少安装了JDBC驱动程序)。这不一定是真的,为什么Java客户机不能连接到远程数据库?