【问题标题】:Scala project won't compile in Eclipse; "Could not find the main class."Scala 项目不会在 Eclipse 中编译; “无法找到主类。”
【发布时间】:2010-10-17 13:46:19
【问题描述】:

我已经从 /update-current 安装了 Eclipse 3.5.2 和今天的 Scala 插件(即 Scala 2.8 final)。我可以编译和运行由实现 main() 的单个单例对象组成的 Scala 项目。

但是,如果项目包含更多类,我会收到“找不到主类”错误。

我已经尝试搜索解决方案,我发现:

Eclipse 正在正确查找 Main$ 类,而不是 Main 类
* 在 Debug Configurations 下,我的主类被正确识别为 mypackage.Main
* 我的插件是最新的,推荐用于我的 Eclipse 版本
* 清理、重启等无济于事。

同一个项目将使用 scalac 编译。

感谢您提供有关如何解决此问题的任何想法。

编辑:MatthieuF 建议我应该发布代码。

这个 sn-p 产生一个错误。这不是最惯用的代码,但我以这种方式编写它来测试我的环境。我将其作为单个文件和单独的文件进行了尝试。它确实适用于 scalac。

import swing._

class HelloFrame extends Frame {
        title = "First program"
        contents = new Label("Hello, world!")
}

object Hello {
  val frame = new HelloFrame    
  def main(args : Array[String]) : Unit = {
        frame.visible = true
   }
}

但是,如果我将 HelloFrame 的定义嵌套在 Hello 中,它就可以工作。这个 sn-p 完美运行:

import swing._

object Hello {

    class HelloFrame extends Frame {
        title = "First program"
        contents = new Label("Hello, world!")
    }

    val frame = new HelloFrame

    def main(args : Array[String]) : Unit = {
        frame.visible = true
    }
}

【问题讨论】:

  • 你能发布你的代码吗?

标签: eclipse scala eclipse-plugin scala-ide


【解决方案1】:

对我来说,问题在于存在阻止编译的构建错误(请参阅“问题”选项卡);哎呀!您看到错误的原因是尽管编译步骤失败,但 run 宏仍在继续,并尝试运行它期望存在的类文件;它们不存在,因为存在阻止编译的构建错误,所以它说它找不到 Main(未编译)。

当构建成功完成时问题就消失了,即错误得到修复。

我想,理论上,您的构建未成功完成可能有更复杂的原因,这些原因未在问题中列出。

【讨论】:

  • 噢!当我遇到这个问题时,我完全错过了查看问题视图。谢谢提醒。
  • 这对我也有用。我遇到了一个类路径问题,由于某种奇怪的原因阻止了 Scala 插件找到我的主类。现在一切都好!
【解决方案2】:

一种可能是您尝试使用 ctrl-F11 启动,但来自不同的类。

Scala Eclipse 插件不遵守 Java 启动的默认设置。在 Preferences->Run/Debug->Launching 中,有一些选项 Launch Operation->Always Launch the previous selected application 等,目前在 Scala eclipse 插件中是不行的。要启动指定的 main,您需要从类的编辑器中启动它。

为此提出了一个错误。 http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour

编辑:现在(大部分)已修复。

【讨论】:

  • 我使用 Alt-Shift-X、S 或右键单击 Package Explorer 中实现 main() 的对象并选择 Run As/Scala Application 来启动。不幸的是,问题仍然存在。
【解决方案3】:

对我来说,这是 Eclipse 特有的问题。我注意到 .class 文件根本没有构建。所以bin 目录没有编译类。 当我使用 *.sbt 手动编译 *.scala 文件并将其复制到 bin 目录时,它按预期工作。 我尝试了不同的技巧和窍门,但直到我在 Eclipse 中重新安装 Scala 插件后才奏效。

【讨论】:

    【解决方案4】:

    我会通过执行“Project->Clean..”来解决类似的问题,并自动构建下一个。

    【讨论】:

      【解决方案5】:

      我自己制作的 Java 应用程序出现了同样的错误消息。

      问题是我删除了(虽然在 Eclipse 中)属于 Java 构建路径 的 jar,但没有从 Java 构建路径(项目的“属性”窗口)中删除它。当我这样做时,该类可以再次编译并运行。

      【讨论】:

        【解决方案6】:

        确保.class 文件存在,通常位于bin 目录下。

        特别是,如果你在同一个项目中不相关的文件有错误,那么编译可能会失败,并且不会产生.class文件。

        【讨论】:

        • 不,我没有看到 .class 文件。我预料到了这一点,因为编译失败并显示“找不到主类”消息。
        • “找不到主类”不是编译器错误。这是来自 Eclipse 的错误。如果编译工作正常,那里会有类文件。尝试关闭项目和/或清理。你有没有自动检查构建
        • 是的,自动构建已选中。清理或重启并不能解决问题。
        【解决方案7】:

        可能会出现包含错误的项目添加到应用程序的构建路径中,从而阻止成功编译完成的情况。确保在运行应用程序之前从构建路径中删除任何此类项目。

        删除这些项目为我解决了这个问题。

        【讨论】:

          【解决方案8】:

          您有正确的构建工具设置吗?像 sbt 你安装了吗?

          你可以通过 $sbt --version 查看它的版本

          如果没有设置可以从这里下载http://www.scala-sbt.org/download.html

          您可能需要在安装后重新启动 Eclipse。

          【讨论】:

          • 如果您需要更多信息,应该在 cmets 中询问。
          【解决方案9】:

          只需复制您的 XXX.scala 文件代码即可。删除包并创建一个新的 Scala 类。粘贴您的 XXX.scala 代码。 (如果您使用的是 maven,请执行 maven clean 并构建。)再次运行配置。这对我有用。

          【讨论】:

            【解决方案10】:

            我遇到过这个问题。我刚刚删除了包名,创建了 scala 类,编写了相同的代码,将 Build 设置为“自动构建”。最后,它工作得很好。

            【讨论】:

              【解决方案11】:

              检查 scala-ide.log

              对我来说,问题在于:

              AppData\Local\Temp\sbt_10d322fb\xsbt\ClassName.scala:16:错误:未找到:值输入阶段 enterPhase(currentRun.flattenPhase.next) { s 全名分隔符 }

              【讨论】:

                【解决方案12】:

                如果您使用 Intellij,请将目录标记为源根目录

                【讨论】:

                • 他们在问题中说他们正在使用 Eclipse。
                猜你喜欢
                • 1970-01-01
                • 2014-08-31
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多