JAR Dependency Resolution from Within /usr/share/java
Can someone please explain how JAR files and the Java class loader make use of /usr/share/java? Is this a special directory that the JVM will perform automatic JAR loading and class lookups in, but no other?
For example, if I have x.jar that depends on y.jar. If both jars are in/usr/share/java the dependency, y.jar, is found when loading x.jar. But when loading x.jar from any other directory, I have to explicitl开发者_StackOverflow社区y put y.jar on the classpath, even when it is still in the same directory as x.jar. Why is this?
Is there any way to make other directories behave like /usr/share/java?
Depending on your distribution, /usr/share/java may be among the directories specified in the system property java.ext.dirs. The article Extension Mechanism Architecture explains in more detail. The location of such extensions is platform and version dependent, as mentioned in Installed Extensions.
Addendum: You can examine the property on your platform with the following line of code:
System.out.println(System.getProperty("java.ext.dirs"));
Addendum: Looking closer, /usr/share/java does not appear in any system property; the effect may be due to the Class-Path property of the relevant JARs' manifest. Using this convenient utility, it's possible to examine them.
/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/
It's all about your classpath.
There is nothing special about /usr/share/java other than it is where Debian installs jars that are downloaded form its package manager. I assume they are added to the classpath whenever they are needed by a java program installed by the package manager.
加载中,请稍侯......
精彩评论