【问题标题】:Java: Unresolved compilation problemJava:未解决的编译问题
【发布时间】:2009-07-14 11:25:48
【问题描述】:

“java.lang.Error:未解决的编译问题”的可能原因是什么?

补充资料:

在从现有 JAR 之上的构建中复制一组更新的 JAR 文件并重新启动应用程序后,我看到了这一点。 JAR 是使用 Maven 构建过程构建的。

如果接口更改,我希望看到 LinkageErrors 或 ClassNotFound 错误。上面的错误提示了一些较低级别的问题。

干净的重建和重新部署解决了这个问题。此错误是否表明 JAR 已损坏?

【问题讨论】:

  • 你做了什么导致这个错误?
  • 我通过重命名输入参数而不是重命名方法中所有出现的该参数而导致此错误。有趣的是mvn compile 不会导致错误,但运行程序会。 mvn clean compile 在编译期间显示错误(如预期的那样)。

标签: java


【解决方案1】:

(2015-07-28重写)

当编译有错误的代码时,Eclipse 的默认行为是生成字节码并抛出你看到的异常,从而允许程序运行。这是可能的,因为 Eclipse 使用它自己的内置编译器,而不是 Apache Maven 使用的来自 JDK 的 javac,并且由于错误导致编译完全失败。如果您在 Maven 项目上使用 Eclipse,而您也在使用命令行 mvn 命令,则可能会发生这种情况。

解决方法是修复错误并重新编译,然后再次运行。

该设置在此屏幕转储中用红色框标记:

【讨论】:

  • 那不是我的情况。我在将 JAR 文件(使用 Maven 构建)部署到服务器后看到了这一点。
  • 也许您的 Maven 构建配置存在问题,它使用了 Eclipse 输出目录中的 .class 文件。无论如何,我唯一一次看到该错误是在 eclipse 中运行带有编译错误的代码时。
  • 在这种情况下,您的 maven 构建很可能已损坏。尝试从命令行清理并重新编译,同时关闭 Eclipse。
  • 没有看到您编辑了问题。我会重新调查 Maven 构建过程,因为它似乎并不完全干净。它不应该能够创建破碎的罐子!你有构建服务器吗?
  • 我也遇到了同样的问题。看起来,正如 Michael 所说,这是 Maven 拾取 Eclipse 生成的类文件。
【解决方案2】:

尝试清理eclipse项目

【讨论】:

    【解决方案3】:

    你只是尝试通过命令清理 maven

    mvn clean
    

    然后是下面的命令

    mvn eclipse:clean eclipse:eclipse
    

    并重建您的项目....

    【讨论】:

    • 鉴于 m2e Eclipse 插件的当前质量(2015 年),我建议使用 Eclipse 而不是各种 eclipse maven 目标。
    【解决方案4】:

    您编译的类可能需要使用新的 jar 从源代码重新编译。

    尝试运行“mvn clean”然后重建

    【讨论】:

      【解决方案5】:

      Thorbjørn Ravn Andersen 正确回答了主要部分。

      这个答案试图阐明剩下的问题:有错误的类文件怎么会在 jar 中结束?

      每个构建(Maven 和 javac 或 Eclipse)在遇到编译错误时都会以特定的方式发出信号,并且会拒绝从中创建 Jar 文件(或至少显着地提醒您)。将有错误的类文件静默获取到 jar 中的最可能原因是 Maven 和 Eclipse 的并发操作。

      如果您在运行 mvn 构建时打开了 Eclipse,您应该禁用 项目 > 自动构建直到 mvn 完成。

      编辑: 让我们试着把谜语分成三个部分:

      (1)“java.lang.Error: Unresolved compilation”是什么意思 问题”

      Thorbjørn Ravn Andersen 对此进行了解释。毫无疑问,Eclipse 在编译时发现了一个错误。

      (2) eclipse编译的class文件怎么会出现在jar文件中 通过 maven(假设 maven not 配置为使用 ecj 编译)?

      这可能发生在调用 Maven 时没有或不完整的清理。或者,自动 Eclipse 构建可以对文件系统中的更改做出反应(由 Maven 完成)并重新编译一个类,之前 Maven 继续将类文件收集到 jar 中(这就是我在我原来的答案中是指“并发操作”)。

      (3)怎么会出现编译错误,而mvn clean却成功了?

      还有几种可能性:(a) 编译器不同意源代码是否合法,或者 (b) Eclipse 编译时使用了损坏的设置,例如不完整的类路径、错误的 Java 合规性等。无论哪种方式,都需要一系列的刷新和清理在 Eclipse 中构建应该会出现问题。

      【讨论】:

      • 我不认为这是一个并发问题,因为它非常系统化并且总是会发生。我认为代码在加载过程中被 JVM 真正使用时,会以某种方式按需编译。不知道为什么这是可能的。我认为编译时检查是使 Java 优于 Python 的原因...
      【解决方案6】:

      当我使用具有无效类路径的启动配置时出现此错误。就我而言,我有一个最初使用 Maven 的项目,因此启动配置中有一个 Maven 类路径元素。后来我将项目更改为使用 Gradle,并从项目的类路径中删除了 Maven 类路径,但启动配置仍然使用它。我在尝试运行它时遇到了这个错误。清理和重建项目并没有解决此错误。相反,编辑启动配置,删除项目类路径元素,然后将项目添加回类路径中的用户条目。

      【讨论】:

        【解决方案7】:

        我多次遇到此错误并努力解决。最后,我删除了运行配置并重新添加了默认条目。效果很好。

        【讨论】:

        • 嗯,是的......但是按照公认的答案去做会更快。它只是首选项中的一个标志。
        【解决方案8】:
        1. 尝试在 Eclipse 中包含 package 名称,以防万一忘记了
        2. 使用前导入所有包,例如:import java.util.Scanner 使用前Scanner 类。
        3. 这些改进可能会奏效,但不会再提供Java: Unresolved compilation problem。
        4. 还要确保检查compiler compliance level 和选中的jdk version 是否相同

        【讨论】:

          【解决方案9】:

          作为一个奇怪的案例,我遇到了这样一个异常,其中异常消息(未解决的编译 bla bla)被硬编码在生成的类本身内部。反编译类揭示了这一点。

          【讨论】:

            【解决方案10】:

            我在使用 Visual Studio Code 时遇到了同样的问题。根本原因是备份的java文件留在了同一目录中。

            删除了备份的java文件 当构建失败时,选择Fix it,它会清理缓存并重新启动workSpace。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-12-02
              • 1970-01-01
              • 2017-04-03
              相关资源
              最近更新 更多