从/ usr / share / java中解压缩JAR依赖项

有人可以解释一下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程序需要它们,就会将它们添加到类路径中。