我已经从/ update-current安装了Eclipse 3.5.2和今天的Scala插件(这是Scala 2.8 final。)我可以编译并运行由单个单例对象组成的Scala项目,该对象实现main()。
但是,如果项目包含更多类,我会收到“找不到主类”错误。
我试过寻找解决方案,然后发现:
Eclipse正在寻找Main $类,而不是Main类
*在Debug Configurations下,我的主类被正确识别为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
}
}
但是,如果我在Hello中嵌入HelloFrame的定义,它就可以了。这个片段完美运行:
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
}
}
答案 0 :(得分:21)
对我来说,问题是存在构建错误(请参阅“问题”选项卡),这会阻止编译;哎呀!您看到错误的原因是尽管编译步骤失败,运行宏仍会继续,并尝试运行它期望存在的类文件;它们不存在,因为存在阻止编译的构建错误,所以它说它找不到Main(未编译)。
当构建成功完成时问题消失,即错误得到修复。
我想,从理论上讲,可能有更复杂的原因导致您的构建未成功完成但未在问题中列出。
答案 1 :(得分:5)
一种可能性是您尝试使用ctrl-F11启动,但是来自不同的类。
Scala Eclipse插件不遵循Java启动的默认值。在首选项 - >运行/调试 - >启动中,有一些选项启动操作 - >始终启动以前选择的应用程序等。这当前在Scala eclipse插件中不起作用。要启动指定的main,您需要从该类的编辑器中启动它。
编辑:现在(大部分)修复了这个问题。
答案 2 :(得分:4)
对我而言,这是Eclipse特有的问题。我注意到.class
文件根本没有构建。所以bin
目录没有编译类。
当我使用* .sbt手动编译* .scala文件并将其复制到bin
目录时,它按预期工作。
我尝试了不同的提示和技巧,直到我重新安装了Eclipse中的Scala插件,它才起作用。
答案 3 :(得分:2)
我通过执行"项目 - >清洁..."解决类似的问题。下一步自动构建。
答案 4 :(得分:1)
我和我自己制作的Java应用程序有相同的错误消息。
问题是我删除了(虽然在Eclipse中)一个属于 Java构建路径的jar,而没有从Java构建路径(项目的Properties窗口)中删除它。当我这样做时,课程可以编译并再次运行。
答案 5 :(得分:0)
确保.class
文件存在,通常位于bin
目录下方。
特别是,如果同一项目中的不相关文件中存在错误,则编译可能会失败,并且不会生成.class
个文件。
答案 6 :(得分:0)
可能存在包含错误的项目添加到应用程序的构建路径中,这会阻止成功编译的完成。确保在运行应用程序之前从构建路径中删除任何此类项目。
删除这些项目解决了我的问题。
答案 7 :(得分:0)
您是否有正确的构建工具设置?像sbt你安装了吗?
您可以通过$ sbt --version
查看其版本如果没有设置,您可以从此处下载http://www.scala-sbt.org/download.html
安装后可能需要重新启动eclipse。
答案 8 :(得分:0)
只需复制您的XXX.scala文件代码即可。删除包并创建一个新的Scala类。粘贴您的XXX.scala代码。 (如果您正在使用maven,请执行maven clean并构建。)再次运行配置。这对我有用。
答案 9 :(得分:0)
我遇到过这个问题。我刚刚删除了包名,创建了scala类,编写了相同的代码,将Build Build设置为“Buildmaticallymatically”。最后,它完美无缺。
答案 10 :(得分:0)
检查scala-ide.log
对我来说,问题是错误:
AppData \ Local \ Temp \ sbt_10d322fb \ xsbt \ ClassName.scala:16:错误:未找到:value enteringPhase enteredPhase(currentRun.flattenPhase.next){s fullName separator}
答案 11 :(得分:0)
如果您使用的是Intellij,请将目录标记为源根