2012-07-10 71 views
0

我想將我的Java程序作爲JAR文件分發。我的程序需要Oracle JDBC驅動程序,它也作爲JAR文件提供。但java -jar命令只接受一個JAR文件。因此我必須合併這兩個JAR文件。這可以很容易地完成,但我可以做到這一點?我是否允許將我的程序作爲包含Oracle JDBC JAR文件內容的JAR文件進行分發?是否允許重新包裝Oracle Oracles JDBC驅動程序?

+1

這是一個法律問題,而不是編程問題,所以不屬於SO。 – APC 2012-07-10 13:00:46

回答

6

但是java -jar命令只接受一個JAR文件。

這是不正確的。您的JAR文件可以包含帶有類路徑的清單:可以命名Oracle .jar文件的條目。

+2

@ceving當然這是一個答案。 OP只需在清單中命名Oracle JAR文件。與重新包裝相比,這是一個非常好的答案,並帶來了所有的風險。 – EJP 2012-07-10 10:12:50

+0

ceving是OP :)所以,即使這是一個正確的答案,OP只是不喜歡它。 – 2012-07-10 10:23:31

+0

@MarkoTopolnik想當然;-) – EJP 2012-07-10 10:26:06

1

是的,只要您不修改jar文件或其中的任何文件,就可以將Oracle JDBC驅動程序打包到您的jar文件中。在某些庫中,還需要將許可證文件也包含在內您的發行版 - 您需要閱讀各個jar文件的許可證詳細信息。通用甲骨文分配許可條款可以在這裏http://www.oracle.com/technetwork/licenses/distribution-license-152002.html

發現關於你的問題,請參見下面的解釋的java -jar部分:

要啓動,我們使用該命令的可執行的JAR文件java -jar executable.jar

JVM將調查jar文件的清單並執行主類的主要方法 - 您在jar文件中指定的方法。應用程序的任何依賴關係都可以通過類路徑設置來滿足 - 我們不需要在啓動應用程序時指定所有的依賴關係jar文件。

還有的類路徑設置不同的方式:

  • 設置系統類路徑(在Windows set CLASSPATH=app1.jar;app2.jar;driver.jar;和在Unix/Linux export CLASSPATH=app1.jar:app2.jar:app3.jar)。當您控制系統變量並且它是受控環境時,此方法非常有用,但此方法不適用於將應用程序分發到客戶端
  • 在啓動應用程序時提及類路徑。這可以通過使用java comman的-classpath選項完成 - 例如java -classpath app1.jar;app2.jar;driver.jar -jar executable.jar此方法對快速測試非常有用,並且如果要引用的jar文件的數量少於
  • 指定mainfest類路徑。這是打包應用程序的最佳選擇。我們可以在清單類路徑中指定的依賴,這樣Class-Path: app1.jar app2.jar driver.jar

注:請用適當的分隔符的類路徑條目,例如在Windows ;是分隔符的類路徑條目,在UNIX :是分隔符,並在清單你已經使用空間作爲分隔符。另外,在提到app1.jar/app2.jar/driver.jar的地方,你必須使用絕對或相對路徑的jar文件

+0

當使用'-jar'選項時'-classpath'選項被忽略。請參閱:http://docs.oracle.com/javase/1.4。2/docs/tooldocs/windows/java.html – ceving 2012-07-10 11:09:45

+0

您所指的許可證只要對我的應用程序有必要就允許重新分發。但它沒有說明如何允許重新分配的方式。問題是:是隻允許重新分配原始的ojdbc6.jar,還是允許它將ojdbc6.jar文件的類文件重新分發到一個新的jar文件中? – ceving 2012-07-10 11:20:00