Jini ClassDep的类路径问题,Java的依赖查找器

时间:2009-04-13 22:09:44

标签: java classpath jini

我开始使用Sun的ClassDep作为solution to fight the inclusion of unnecessary JARs in my resulting WAR application。它似乎摇滚。但是,这只野兽很难驯服!

即使它们明确包含在我传递给它的类路径中,我也会收到几个未找到的类错误。例如:

couldn't find: org.apache.log4j.Logger: No file for: Logger
couldn't find: org.hibernate.Session: No file for: Session
couldn't find: org.joda.time.LocalDate: No file for: LocalDate

但是......看看我给它的一条类路径:

...;"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\hibernate3.jar";...;"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\joda-time-1.5.2.jar";"C:\Documents and Settings\Andre\Desktop\workspace\icaro\WebContent\WEB-INF\lib\log4j-1.2.11.jar";...

我经历了那些,看到“缺失”类实际上是在那些文件中。

任何人都知道是什么给了什么?

3 个答案:

答案 0 :(得分:0)

我看到你在Windows上运行。你能否遇到臭名昭着的“输入线太久”的例外情况?

如果你包含大量的jar文件,那么你的Classpath可能太长了。

如果这是你遇到的问题,这个post by Hung Huynh (Terracotta)可以更好地解释这个问题以及如何处理它的几个选项。

答案 1 :(得分:0)

你的罐子不是问题吗? 通常,如果它是类路径问题,您将获得NoClassDefFoundError。

调查此问题的一些方法是

  1. 显示程序中的类路径(System.out.println(System.getProperty(“java.class.path”);

  2. 如果您正在使用类加载器的层次结构(System.out.println(Thread.currentThread()。getContextClassLoader()),请求类加载器在应用程序的各个位置显示已加载类的URL。 getResource(“org / apache / log4j / Logger.class”);

答案 2 :(得分:0)

这些条目可能位于您引用的一个或多个JARS的清单文件中。 Classdep会忽略清单文件条目,因此会给你错误。

请参阅ClassDep文档:

 如果使用JAR文件,则会忽略这些JAR文件中的任何类路径清单条目,因此必须在路径中明确包含这些清单条目的值,否则可能会导致错误。例如,如果你包含jini-ext.jar,那么你也应该显式包含jini-core.jar,因为jini-core.jar位于jini-ext.jar的Class-Path清单条目中。 < / p>