有人可以解释一下JAR文件和Java类加载器如何使用/usr/share/java
吗? 这是一个特殊的目录,JVM将执行自动JAR加载和类查找,但没有其他?
例如,如果我有依赖于y.jar
。 如果两个jar子都在/usr/share/java
中,则在加载x.jar
时会find依赖y.jar
x.jar
。 但是从任何其他目录加载x.jar
时,我必须明确地将y.jar
放在类path中,即使它仍然位于与x.jar
相同的目录中。 为什么是这样?
有没有办法让其他目录的行为像/usr/share/java
?
根据您的发行版本, /usr/share/java
可能位于系统属性java.ext.dirs
指定的目录之中。 文章扩展机制体系结构更详细地解释。 此类扩展的位置与平台和版本相关,如“ 已安装的扩展”中所述 。
附录:您可以使用以下代码行检查您的平台上的财产:
System.out.println(System.getProperty("java.ext.dirs"));
附录:仔细看, /usr/share/java
不会出现在任何系统属性中; 其效果可能是由于相关JARs清单的Class-Path
属性。 使用这个方便的工具 ,可以检查它们。
/usr/share/java/ant-bootstrap.jar 类路径:ant.jar xml-apis.jar xercesImpl.jar xalan.jar /usr/share/java/openoffice/java_uno.jar 类路径:jurt.jar ridl.jar ../../lib/ ../bin/ /usr/share/java/openoffice/juh.jar 类路径:ridl.jar jurt.jar ../../lib/ ../bin/ /usr/share/java/openoffice/jurt.jar 类路径:ridl.jar unoloader.jar ../../lib/ ../bin/
这是关于你的类路径 。
除了Debian安装从包管理器下载的jar包之外,没有什么特别的/usr/share/java
。 我认为,只要包管理器安装的java程序需要它们,就会将它们添加到类路径中。