2016-09-08 51 views
0

我一直在使用一個對Oracle數據庫執行多個查詢的Java程序。我目前正在使用jdbc瘦客戶端(ojdbc7.jar)。對於我使用NetBeans的IDE,並在我的PC上調試或運行JAR,我沒有遇到任何錯誤。運行在Linux環境下生產然而這JAR,報告了以下錯誤:JDBC部署錯誤 - NoClassDefFound

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); 

隨着數據庫用戶名/密碼和JDBCConnection所有被本地存儲。添加額外的打印報表顯示了不及格線爲:

DriverManager.registerDriver(new oracle.jdbc.OracleDriver()); 

我正在圖書館在我的項目已經ojdbc7.jar包括在內。檢查生成>打包下的項目屬性,選中「複製從屬庫」。我的期望在這個點上是庫應該包含在我的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

感謝ujulu,你的評論中是否應該有鏈接? – CCrew

+0

對不起,我以爲我鏈接到文檔。 [這裏](https://netbeans.org/kb/articles/javase-deploy.html)是我想鏈接到的文件。 – ujulu

+0

欣賞它!我會通讀。 – CCrew

回答

1

答案很簡單 - Netbeans在它編譯JAR文件的dist文件夾下的lib文件夾中包含任何引用的庫。我一直只複製已編譯的JAR,而沒有複製關聯的lib文件夾。在複製lib文件夾之後,進程沒有例外地運行。

Netbeans的文檔介紹瞭如何這個功能,其中規定: https://netbeans.org/kb/articles/javase-deploy.html

如果您已經爲該項目指定了任何庫(除了JDK),在dist文件夾中創建一個lib文件夾。這些庫被複制到dist/lib中。

0

ocjdb7.jar應打包到您的可執行JAR中。我建議你嘗試製作一個Maven項目(NetBeans應該有一個方便的嚮導),並將其作爲依賴項引用。 如果將所需的ocjdb7.jar打包到JAR中(解壓縮JAR時只是一個存檔文件),也可以檢查它。

+0

你有什麼聯繫我可以遵循我應該如何妥善包裝到我的JAR?我會研究一個Maven項目,我不熟悉。 – CCrew