10

我想安装不同的 JAR 文件,例如 OS X 上的数据库 JDBC 驱动器,以便其他 Java 应用程序可以找到它们。

我应该把它们放在哪里?我试过~/Library/Java/Extensions了,但它没有接缝工作。

细节:

OS X 10.8.2

java version "1.6.0_35"
Java(TM) SE Runtime Environment (build 1.6.0_35-b10-428-11M3811)
Java HotSpot(TM) 64-Bit Server VM (build 20.10-b01-428, mixed mode)

注意:我无法控制应用程序的初始化方式,但我确实假设应用程序不包含它自己的 Java 发行版,并且它将启动操作系统安装版本(可从命令行获得的版本)。

另外,我没有任何 CLASSPATH 设置,请记住命令行程序可用的环境变量与 OS X 上的 GUI 应用程序可用的环境变量不同。

我需要指定我正在为我的开发机器尝试此方法,并且此方法不是部署 Java 应用程序的方法。

4

4 回答 4

15

请不要这样做。原因如下:其他应用程序将中断,因为将为每个 Java 应用程序加载这些 JAR 文件。

详细说明:我销售适用于 Mac 的 Java 应用程序。它依赖于具有特定最新版本的 JAR 文件(用于 JFreeChart)。有时在相应的 Extensions 文件夹中有相同 JAR 文件的旧版本。这打破了我的应用程序。

但如果你真的想这样做:根据Apple 的文档

扩展库

其他平台上的 Java 软件通常使用 JDK 安装中的 $JAVA_HOME/lib/ext 目录来存储支持类或 jar 文件。虽然 Mac OS X 的 Java 也包含一个 lib/ext 目录,但出于上述相同原因,开发人员不应直接修改它。/Library/Java/Extensions 目录可用于需要放置在系统类路径中的其他 jar 文件或 JNI 库。为了更受控制的访问,~/Library/Java/Extensions 目录可用于支持库的用户级安装。放置在这些目录中的任何一个目录中的项目都不需要在应用程序的类路径中命名,并且将可供在相应范围(系统级或用户级,取决于使用哪个目录)下运行的所有应用程序使用。

于 2012-10-11T14:52:14.350 回答
2

它们必须包含在应用程序的类路径中。如果从命令行执行它,则使用例如“java -cp ~/Library/Java/Extensions/foo.jar Bar”

另一方面,如果您使用像tomcat这样的应用程序服务器,您可以将jar打包到您的应用程序的war中,或者将其放入服务器的共享库文件夹中。

于 2012-10-11T14:40:44.057 回答
1

我将支持 Steve 的评论,并进一步建议您使用MavenIvy进行依赖管理。

图书馆管理是按项目进行的。管理更新和相互依赖性要容易得多。Maven(我不知道 Ivy)可以告诉您哪些库已过时,哪些库相互冲突等。对于每个项目,您可以精确地指定您需要的版本,而不必担心更改是否会破坏其他项目。

于 2012-10-11T15:14:11.293 回答
-3

好的,只是我的贡献......但我想在命令行运行我的小型数据库程序,但我需要类路径中的 mysql-connector-java-5.1.29-bin.jar 来执行此操作。我花了一些时间试图弄清楚并找到了解决方案。我将jar文件放在Library/Java/Extensions文件夹中并重新启动了我的机器。现在上面说你应该在“执行”程序(java -cp ~/Library/Java/Extensions/foo.jar Bar)时包含类路径,但它对我不起作用。相反,我在编译期间发出了命令,然后执行了我的程序:

$ javac -cp /Library/Java/Extensions/mysql-connector-java-5.1.29-bin.jar FirstExample.java  
$ java FirstExample

这就是我得到的......从我的数据库中查询数据:

正在连接数据库...
正在创建语句...
ID: 1, Title: Sales Representative, First: Nancy, Last: Davolio
ID: 2, Title: Vice President, Sales, First: Andrew, Last: Fuller ID: 3, Title : 销售代表,名字:Janet,姓:Leverling
ID:4,职务:销售代表,名字:Margaret,姓氏:Peacock
ID:5,职务:销售经理,名字:Steven,姓氏:Buchanan
ID:6,职务:销售代表,名字:Michael,姓氏:Suyama
ID:7,职务:销售代表,名字:Robert,姓氏:King
ID:8,职务:内部销售协调员,名字:Laura,姓氏:Callahan
ID:9,职务:销售代表,第一:安妮,最后:多兹沃思

再见!

希望这可以帮助

于 2014-02-21T17:42:38.657 回答