开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜