我开始使用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";...
我经历了那些,看到“缺失”类实际上是在那些文件中。
任何人都知道是什么给了什么?
答案 0 :(得分:0)
我看到你在Windows上运行。你能否遇到臭名昭着的“输入线太久”的例外情况?
如果你包含大量的jar文件,那么你的Classpath可能太长了。
如果这是你遇到的问题,这个post by Hung Huynh (Terracotta)可以更好地解释这个问题以及如何处理它的几个选项。
答案 1 :(得分:0)
你的罐子不是问题吗? 通常,如果它是类路径问题,您将获得NoClassDefFoundError。
调查此问题的一些方法是
显示程序中的类路径(System.out.println(System.getProperty(“java.class.path”);
如果您正在使用类加载器的层次结构(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>