2013-01-14 85 views
0

我已經創建了一個連接到oracle數據庫的類,有三個簡單函數connect(),executeStatement()disconnect()。這個類需要一個oracle「thin」JDBC Jar才能工作,所以它是'引用庫'的一部分。One Jar需要另一個罐子

我想現在要做的是導出我的,我上面提到的JAR文件類,所以其他程序可以利用它。但是,當我試圖做到這一點,我會得到以下問題。

Exception in thread "main" java.lang.NoClassDefFoundError: oracle/jdbc/driver/OracleDriver 
Caused by: java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver 

我可以用什麼方法使它成爲我的Jar文件將帶有的Oracle Jar文件?

+0

反而使用諸如Maven之類的依賴關係管理系統。使用Maven構建系統時,您的圖書館的用戶將獲得依賴關係。 – sorencito

回答

2

要加載多個罐子類,Java使用所謂的類路徑。 這是一個罐子列表,但也包含與罐子內容相同結構的目錄。

該列表由參數以下-cp定義java。 查看文檔,例如這裏。

java -cp jar1.jar;jar2.jar com.my.Class 

java -cp jar1.jar;jar2.jar -jar main.jar 

此外,您還可以學習有關MANIFEST.MF可以列出它的依賴罐子。

+0

翁德拉你可以更具體嗎?這段代碼是否放在某個文件中?這是命令行的東西?什麼是你的語法的等價物,jar1,jar2 main.jar或com.my.Class是什麼意思? – user1527739

+0

已更新。更新。 –

1

你必須添加所有由你的程序(包括代碼)需要到classpath的罐子。例如:

的java -cp jar1.jar; jar2.jar com.my.Class

類路徑定義了JVM將尋找代碼時其裝載它。以下是有關在命令行中運行Java程序的快速而簡單的教程:

http://www.sergiy.ca/how-to-compile-and-launch-java-code-from-command-line/

+0

是的,但我添加了一個解釋,說明它爲什麼起作用。這是我對@Ondra所提供的對話的貢獻,所以我覺得你對自己有點苛刻。 – chubbsondubs

+0

我很欣賞門把手的解釋。不幸的是,我想要求更多的澄清。你可以將我鏈接到一個資源,或者提供關於這行代碼行的細節,以及語法的含義?我可以找出它的大部分,但不明白「com.my.Class」 – user1527739

+0

這不是Java代碼。這是您用來在命令行上運行JVM(即java)的命令。這與操作系統有關,因爲如何在命令行上執行命令因操作系統而異。但是這個命令的意思是執行java(第一個字),將下面的jar添加到classpath(-cp jar1.jar; jar2.jar)並在完全限定的類中執行main()方法(com.my.Class )。這是public static void main(String [] args)方法所在的Java類的名稱。 com.my是課程所在的包裝。 – chubbsondubs

0

如果你的意思是你希望你的jar文件是完全獨立的,並沒有依賴關係被暴露給客戶端代碼,那麼你可以嘗試Jar Jar Links這將重命名依賴關係並將它們包含在你的jar中。

其他的可能性是在回答這個similar question提及。

相關問題