0

我开始使用 Sun 的ClassDep作为解决方案,以防止在生成的 WAR 应用程序中包含不必要的 JAR。它似乎在摇摆。但是,这头野兽很难驯服!

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

找不到:org.apache.log4j.Logger:没有文件:Logger
找不到:org.hibernate.Session:没有文件:会话
找不到:org.joda.time.LocalDate:没有文件: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";...

我浏览了这些文件,发现“缺失”的类实际上在这些文件中。

任何人都知道什么给了?

4

3 回答 3

0

I see you are running on windows. Could you be running into the infamous "Input line it too long" exception?

It's possible your Classpath is too long if you're including a large number of jar files.

This post by Hung Huynh (Terracotta) has a better explanation of the issue and a couple of options for how you can handle it if this is the problem you're having.

于 2009-04-18T15:01:15.950 回答
0

难道你的罐子有问题吗?通常,如果是类路径问题,您会收到 NoClassDefFoundError。

对此进行调查的一些方法是

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

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

于 2009-04-21T10:18:02.580 回答
0

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

请参阅ClassDep文档:

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

于 2009-04-23T11:16:26.493 回答