2012-07-10 68 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