我一直在使用Java程序,该程序对Oracle数据库执行多次查询。我目前正在使用jdbc瘦客户端(ojdbc7.jar)。对于IDE我正在使用NetBeans,并在我的PC上调试或运行JAR,我没有遇到任何错误。但是,要在Linux环境中运行此JAR以进行生产,会报告以下错误:
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/OracleDriver
[...]
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.OracleDriver
我用来获取连接的代码是:
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
Connection conn = null;
Properties connectionProps = new Properties();
connectionProps.put("user", DBUsername);
connectionProps.put("password", DBPassword);
conn = DriverManager.getConnection(JDBCConnection, DBUsername, DBPassword);
DBUsername / Password和JDBCConnection全部在本地存储。添加其他打印语句会显示失败的行:
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
我目前在我的项目中包含了ojdbc7.jar。检查Build>下的项目属性打包包装,“复制相关库”。我对此的期望是库应该包含在我的jar文件中。
我也测试过:
DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
同样,我尝试过只使用Class.forName(),并使用两者。
Class.forName("oracle.jdbc.driver.OracleDriver");
阅读其他问题,我知道这可能是我的类路径的一个问题。在Linux环境中,我正在尝试运行它,我将类路径设置为ocjdb7.jar的确切位置而没有运气:
export CLASSPATH=/<Directory Location>/ocjdb7.jar
我已经尝试了多种配置,例如Linux环境已经有一个包含ocjdb6.jar的类路径,所以我用这个版本重新编译,设置类路径并进行测试。报告的错误消息相同。我是否错过了包含此驱动程序的必要设置?在同事Windows 7桌面上进行测试时,发生了同样的错误,这似乎表明这仍然是一个设置问题。
答案 0 :(得分:1)
答案很简单 - Netbeans在其编译JAR文件的dist文件夹下的lib文件夹中包含任何引用的库。我一直只复制已编译的JAR,但不复制关联的lib文件夹。复制lib文件夹后,该过程无异常运行。
Netbeans文档介绍了这个功能如何表明: https://netbeans.org/kb/articles/javase-deploy.html
如果您为项目指定了任何库(除了JDK),则会在dist文件夹中创建一个lib文件夹。这些库被复制到dist / lib。
答案 1 :(得分:0)
ocjdb7.jar 应打包到您的可执行JAR中。我建议你尝试用它制作一个maven项目(NetBeans应该有一个方便的向导),并将其作为依赖项引用。 如果在解压缩时将所需的 ocjdb7.jar 打包到JAR中,您还可以检查(JAR只是一个存档文件)。