Подтвердить что ты не робот

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

Ответ 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, пометьте каталог как корневой каталог