【问题标题】:My code compiles in Eclipse but I get a ClassNotFound at runtime how can I fix it?我的代码在 Eclipse 中编译,但我在运行时得到一个 ClassNotFound 我该如何修复它?
【发布时间】:2010-10-20 08:38:59
【问题描述】:

什么会导致 jar 成功添加到 Eclipse Java 项目,但在运行时找不到该 jar 中的某些类并出现 ClassNotFound 异常?

【问题讨论】:

    标签: java eclipse jar compilation runtime-error


    【解决方案1】:

    我因缺少权限而发生此错误。结果是检查您是否连接到互联网(即可达性)和使用互联网的权限是单独的权限(生活和学习)。

    缺少权限导致应用在尝试运行可达性测试时失败并出现 ClassNotFound 错误。

    希望对某人有所帮助,因为这不是一个有趣的消遣。

    【讨论】:

      【解决方案2】:

      似乎每个人都在正确的轨道上。你为什么不,当你解压 jar 时,将整个东西作为源文件夹添加到你的 eclipse 项目中,看看你是否可以这样加载它?有时,根据类加载器,如果您的类在类路径上多次可用,您可以获得 CNFE……类加载器只是放弃,因为它不知道使用哪一个。

      【讨论】:

      • 它不会简单地从类路径中获取它找到的第一个吗?
      • 你会这样,但我相信我遇到了至少在 Sybase Jaguar 中使用的类加载器,它会保留重复的类路径条目而不是使用第一个条目
      • 我必须把它归档...你知道这可能解释了我必须为 JDBC 项目做的一些黑客工作...我发誓当时我的眼睛在流血。跨度>
      • 感谢大家的帮助,现在它正在工作,我有点想知道为什么它以前不起作用,因为现在 jar 文件在类路径选项卡下列出了两次——一次在“引导条目”下,然后一次在“用户条目”下。用户条目似乎来自编译所需的项目设置。但只有在我复制了“引导条目”中的罐子之后,它才真正起作用。不知道为什么会这样。有什么想法吗?
      • 我认为引导程序将一些元信息添加到 jars...ears、wars 和 jars 中都有在运行时自动检查的文件或属性...我避免使用 IDE 和很少的默认 nits它是一种宗教的意义。我明确地避免了 IDE 给我的任何细节,并使我的代码在编译时和运行时都非常明确,以至于它单调乏味
      【解决方案3】:

      @ojblass 几乎可以肯定它是正确的。只是为了扩展它,您可以使用 jar(1) 工具转储 jar 文件并查看该类是否存在。 Eclipse 给我带来了惊喜,项目定义不明白要放入我生成的 jar 文件中以使用 java -jar 运行的内容。

      【讨论】:

      • 关于那个话题,我很想知道我是否可以导出 Eclipse 认为项目应该构建的样子......我讨厌无头构建......
      • 我解压了罐子并查看了它——我看到了里面的类。至于类路径,我认为当您在 Java 构建路径的“库”选项卡下将 jar 添加到项目时,Eclipse 会自动处理该问题 -> 我使用“添加外部 jar”添加它。所以你说这还不够——我不能相信 Eclipse 知道这也需要添加到类路径中?
      • @oj,我一般讨厌 IDE。 @Michael,告诉我们你是如何运行程序的。如果它与“java -jar”一起使用,那么它应该可以工作,这让我怀疑你是在使用 -classpath 从命令行运行,或者没有告诉 Eclipse 作为 jar 文件运行,并且Eclipse 正在生成 -classpath 表单。
      • 此外,如果您可以在 eclipse 中运行这些东西,那么查看 Run As... 定义以获取一些提示可能是个好主意。
      • @ojblass - 在“运行配置”下,我在“类路径”部分以及“源”选项卡(“源查找路径”)中看到了 guice.jar。
      【解决方案4】:

      运行时的 CLASSPATH 变量可能设置不正确,或者您错过了将一些类添加到 jar 文件中。

      【讨论】:

      • 我解压了罐子并查看了它——我看到了里面的类。至于类路径,我认为当您在 Java 构建路径的“库”选项卡下将 jar 添加到项目时,Eclipse 会自动处理该问题 -> 我使用“添加外部 jar”添加它。所以你说这还不够——我不能相信 Eclipse 知道这也需要添加到类路径中?
      • Java 是一头复杂的野兽,因此您在问题中使用链接一词会引发讨论。 jar 文件的核心只是一个 zip 文件。根据您导入类的方式和 jar 文件的目录结构,添加顶级 jar 文件可能根本不够……这些类是否有可能是匿名内部类?
      • @Michael,你的应用程序运行得如何?
      • 使 JAR 在编译时可用和在运行时可用之间有明显的区别
      • 不,有问题的类不是匿名内部类——只是你普通的香草类。值得一提的是,它是 Google Guice 框架,并且该类称为 com.google.inject.Module。我只是想把这个框架添加到一个需要它但没有将它作为自己源代码的一部分提供的开源项目中。我花了一整天的时间尝试不同的方法来构建这两个。但除此之外——根据我给你的新信息,它可能不是 CLASSPATH?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-05
      • 1970-01-01
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多