24

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

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

我试过寻找解决方案,我发现:

Eclipse 正在正确查找 Main$ 类,而不是
Debug Configurations 下的 Main 类 *,我的主类被正确识别为 mypackage.Main
* 我的插件是最新的,建议用于我的 Eclipse 版本
* 清理、重新启动等没救

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

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

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

此代码段会产生错误。这不是最惯用的代码,但我这样写是为了测试我的环境。我将其作为单个文件和单独的文件进行了尝试。它确实适用于 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 中,它就可以工作。这个片段运行完美:

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
    }
}
4

12 回答 12

21

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

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

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

于 2011-07-01T21:08:48.437 回答
5

一种可能性是您尝试使用 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

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

于 2010-10-17T14:28:24.423 回答
4

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

于 2017-03-05T16:57:52.877 回答
2

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

于 2015-03-02T07:22:05.853 回答
1

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

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

于 2011-05-13T09:45:06.057 回答
0

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

特别是,如果您在同一个项目中的不相关文件中出现错误,则编译可能会失败,并且不会.class生成任何文件。

于 2010-10-17T17:02:00.547 回答
0

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

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

于 2014-11-10T15:06:55.337 回答
0

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

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

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

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

于 2015-11-27T09:11:47.127 回答
0

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

于 2016-10-17T19:27:47.830 回答
0

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

于 2016-10-31T02:14:22.113 回答
0

检查 scala-ide.log

对我来说,问题是有错误:

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

于 2017-01-12T11:54:31.620 回答
0

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

于 2017-06-13T20:59:36.267 回答