来自/ usr / share / java的JAR依赖性解析

时间:2011-02-12 00:20:01

标签: java linux

有人可以解释JAR文件和Java类加载器如何使用/usr/share/java吗?这是一个特殊的目录,JVM将执行自动JAR加载和类查找,但没有其他目录吗?

例如,如果x.jar取决于y.jar。如果两个jar都在/usr/share/java,则在加载y.jar时会找到x.jar依赖项。但是当从任何其他目录加载x.jar时,我必须在类路径上明确地放置y.jar,即使它仍然与x.jar在同一目录中。这是为什么?

有没有办法让其他目录的行为像/usr/share/java

2 个答案:

答案 0 :(得分:2)

这完全取决于您的classpath

除了Debian安装从其包管理器下载的jar之外,/usr/share/java没有什么特别之处。我假设只要包管理器安装的java程序需要它们,它们就会被添加到类路径中。

答案 1 :(得分:2)

根据您的发行版,/usr/share/java可能属于系统属性java.ext.dirs中指定的目录。文章Extension Mechanism Architecture更详细地解释了这一点。此类扩展的位置取决于平台和版本,如Installed Extensions中所述。

附录:您可以使用以下代码行检查平台上的属性:

System.out.println(System.getProperty("java.ext.dirs"));

附录:仔细观察,/usr/share/java没有出现在任何系统属性中;效果可能是由于相关JAR清单的Class-Path属性。使用这个方便的utility,可以检查它们。

/usr/share/java/ant-bootstrap.jar 
Class-Path: ant.jar xml-apis.jar xercesImpl.jar xalan.jar

/usr/share/java/openoffice/java_uno.jar 
Class-Path: jurt.jar ridl.jar ../../lib/ ../bin/

/usr/share/java/openoffice/juh.jar 
Class-Path: ridl.jar jurt.jar ../../lib/ ../bin/

/usr/share/java/openoffice/jurt.jar 
Class-Path: ridl.jar unoloader.jar ../../lib/ ../bin/