Scala проект не будет компилироваться в Eclipse; "Не мог найти основной класс."
Я установил плагин Eclipse 3.5.2 и сегодня Scala из /update -current (что Scala 2.8 final.) Я могу скомпилировать и запустить проекты Scala, состоящие из одного одноэлементного объекта, который реализует main(),
Но если проект содержит больше классов, я получаю ошибку "Не удалось найти основной класс".
Я попытался найти решение, и я обнаружил:
Eclipse правильно ищет основной класс $, а не основной класс
* в разделе "Конфигурации отладки" мой основной класс правильно идентифицирован как mypackage.Main
* мой плагин обновлен и рекомендован для моей версии Eclipse
* Чистка, перезагрузка и т.д. не помогает.
Тот же проект будет компилироваться со скаляром.
Спасибо за любые идеи о том, как решить эту проблему.
EDIT: MatthieuF предложил мне опубликовать код.
Этот фрагмент создает ошибку. Это не самый идиоматический код, но я написал его таким образом, чтобы проверить свою среду. Я попробовал его как отдельный файл и как отдельные файлы. Он работает со скаляром.
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
}
}
Ответы
Ответ 1
Для меня проблема заключалась в том, что была ошибка сборки (см. вкладку "Проблемы" ), которая мешала компиляции; упс! Причина, по которой вы видите ошибку, заключается в том, что макрос выполнения продолжается, несмотря на неудачный этап компиляции, и пытается запустить файлы классов, которые он ожидает; они не существуют, потому что существует ошибка сборки, препятствующая компиляции, поэтому он говорит, что не может найти Main (не скомпилирован).
Проблема исчезает, когда сборка может завершиться успешно, т.е. исправлены ошибки.
Я думаю, теоретически, могут быть более сложные причины, по которым ваша сборка не завершается успешно, которые не перечислены в "Проблемы".
Ответ 2
Одна из возможностей заключается в том, что вы пытаетесь запустить ctrl-F11, но из другого класса.
Плагин Scala Eclipse не подчиняется настройкам по умолчанию для запуска Java. В настройках- > Запуск/Отладка- > Запуск есть несколько параметров. Запустить операцию- > Всегда Запускать ранее выбранное приложение и т.д. Это в настоящее время не работает в плагине Scala eclipse. Чтобы запустить указанный основной файл, вам нужно запустить его из редактора для класса.
Для этого была ошибка. http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour
EDIT: теперь (в основном) исправлено.
Ответ 3
Для меня это была особая проблема Eclipse. Я заметил, что файл .class
не был создан вообще. Поэтому каталог bin
не имеет скомпилированных классов.
Когда я вручную скомпилировал *.scala файл с помощью *.sbt и скопировал его в каталог bin
, он работал должным образом.
Я пробовал разные подсказки и трюки, и он не работал до тех пор, пока я переустановил плагин Scala в Eclipse.
Ответ 4
Я бы решил аналогичную проблему с помощью исполнительного проекта "Project- > Clean.." со следующим автоматическим построением.
Ответ 5
У меня было такое же сообщение об ошибке с приложением Java, сделанным мной.
Проблема заключалась в том, что я удалил (хотя и внутри Eclipse) банку, которая принадлежала пути Java build, не удаляя ее из пути сборки Java (окно свойств проекта). Когда я это сделал, класс мог компилироваться и запускаться снова.
Ответ 6
Убедитесь, что существуют файлы .class
, обычно ниже каталога bin
.
В частности, если у вас есть ошибки в несвязанных файлах в одном проекте, компиляция может завершиться неудачей, и не будут создаваться файлы .class
.
Ответ 7
Может существовать проект, содержащий ошибки, добавленные к пути сборки приложения, что предотвращает завершение успешной компиляции. Перед запуском приложения убедитесь, что вы удаляете любой такой проект из пути сборки.
Удаление этих проектов решило проблему для меня.
Ответ 8
У вас есть правильная настройка инструмента сборки? Как sbt вы его установили?
Вы можете проверить его версию на $sbt --version
Если он не настроен, вы можете скачать здесь http://www.scala-sbt.org/download.html
Возможно, вам придется перезапустить eclipse после установки.
Ответ 9
Просто скопируйте код файла XXX.scala. Удалите пакет и создайте новый класс Scala. Вставьте свой код XXX.scala. (Если вы используете maven, сделайте maven clean и build.) Запустите конфигурацию еще раз. Это работает для меня.
Ответ 10
Я столкнулся с этой проблемой. Я только что удалил имя пакета, создал класс scala, написал тот же код, Set Build для "Build Automatically". Наконец, он отлично работает.
Ответ 11
Проверьте scala -ide.log
Для меня проблема заключалась в том, что были ошибки:
AppData\Local\Temp\sbt_10d322fb\xsbt\ClassName.scala: 16: ошибка: не найден: значение enterPhase enterPhase (currentRun.flattenPhase.next) {s fullName separator}
Ответ 12
Если вы используете Intellij, пометьте каталог как корневой каталог