【问题标题】:Kotlin and Java project in Eclipse, NoClassDefFoundError, where are the class files?Eclipse中的Kotlin和Java项目,NoClassDefFoundError,类文件在哪里?
【发布时间】:2019-12-25 19:47:53
【问题描述】:

this question中介绍了Eclipse中Kotlin + Java + Gradle的基本配置。它允许我创建 Kotlin 代码。 Kotlin 和 Java 的特性是正确存在的。不幸的是,代码没有运行。不像 Kotlin 应用程序,也不像 JUnit 测试。

当从 Java 代码调用我的(即由我创建的)Kotlin 类时,它会产生 NoClassDefFoundError。当从 Gradle 或 IntelliJ 运行相同的测试/应用程序时,代码会正确运行。

到目前为止,我的调查发现,执行时找不到 bin 文件夹中的类文件。

使用构建插件

下图显示src 树存在。所有 Java 编译类都在 src 树中。 kotlin_bin 文件夹有正确的文件夹,但没有文件。

使用 gradlew eclipse 并导入 .project 文件

这会导致相同的行为。我更喜欢 buildship 来管理 gradle。

工具版本

我正在使用:

  • Eclipse 2019-03 或 2019-06
  • Kotlin eclipse 插件 0.8.17
  • Kotlin-gradle eclipse 插件 0.8.17
  • Buildship 插件 3.1.0
  • Gradle 5.4.1
  • Kotlin 1.3
  • Java 11

关于如何进行的任何提示?我希望能够在 Eclipse 中运行。我们正在向项目中添加一个小的 Kotlin 部分,我不想强​​迫我的团队切换到 IntelliJ。

【问题讨论】:

  • 不确定你的约束是什么,但它是一个相当过时的 Kotlin 版本。它现在是 1.3+,如果可能的话,如果可以的话,你可能想从更新它开始。
  • 对不起。这是 kotlin eclipse 插件版本。将更正使用的工具列表。
  • 嗨。同样在这里。你那边有什么进展吗?
  • 很遗憾没有。在命令行或 IntelliJ IDEA 上通过 gradlew 构建,但不能在 Eclipse 中运行。
  • @MichielLeegwater 感谢您的快速回答。我想我现在将更改为 IDEA/Gradle。只是为了让事情正常进行并在以后解决我们应该也能够与日食一起工作的问题。

标签: java eclipse gradle kotlin


【解决方案1】:

这个问题似乎是 Eclipse 插件的问题。见KE-344。所有症状似乎都匹配。

【讨论】:

    【解决方案2】:

    通常,当您收到NoClassDefFoundError 时,这意味着类加载器无法找到您的类,因为您的类“消失了”。在 Eclipse 中,这通常通过一个简单的“清理项目”来强制重建。另一方面,ClassNotFoundException 表示你的类路径出了问题。如果清理项目和重建不起作用,我认为您的类路径仍然可能有问题。要在 Eclipse 中检查您的类路径,请切换到 Navigator View 并打开您的 .classpath 文件(见下图)。

    然后,检查您的 classpathentry 节点以查看“输出”路径。您的.classpath 应该包含源位置、输出位置(已编译类所在的位置)的映射,以及对 JRE 容器和项目导入的任何库的引用。确保所有这些条目都正确。

    我的猜测是您的类路径不正确。要修复,请按照以下说明操作:https://javarevisited.blogspot.com/2011/06/noclassdeffounderror-exception-in.html。其中一项建议应该可行。

    【讨论】:

    • 感谢您的回复。它似乎只是Java,因此我不确定回复是否会指出问题。一个表面的检查产生了:似乎发生了一些奇怪的事情。 kotlin 编译的类放在一个名为 kotlin_bin 的虚拟文件夹中。在运行时不使用虚拟文件夹。我编辑了类路径无济于事。将在本周末晚些时候继续调查。
    • 感谢您提供解释。它还没有导致解决的情况。由于这个答案,理解得到了提高。
    • @MichielLeegwater,Eclipse 中对 Kotlin 的支持似乎已损坏:discuss.kotlinlang.org/t/…
    【解决方案3】:

    因为我分支了我的项目,然后重构项目名称以适应下一个功能。 然后我的项目找不到 kotlin 类。我搜索 google 和 stackoverflow 没有效果。 我用 scm HEAD 版本比较项目,发现差异

    .项目

    <linkedResources>
        <link>
            <name>kotlin_bin</name>
            <type>2</type>
            <locationURI>org.jetbrains.kotlin.core.filesystem:/**YOUR_PROJECT**/kotlin_bin</locationURI>
        </link>
    </linkedResources>
    

    然后我在 .project 文件中修复项目名称。重建后已修复

    【讨论】:

      猜你喜欢
      • 2013-08-27
      • 2022-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-01
      • 1970-01-01
      相关资源
      最近更新 更多