it-swarm.com.ru

Проект Scala не будет компилироваться в Eclipse; "Не мог найти основной класс."

Я установил Eclipse 3.5.2 и сегодняшний плагин Scala из/update-current (это финал Scala 2.8). Я могу компилировать и запускать проекты Scala, состоящие из одного-единственного объекта, который реализует main (). 

Но если проект содержит больше классов, я получаю сообщение об ошибке «Не удалось найти основной класс».

Я попытался найти решение и обнаружил:

Eclipse правильно ищет класс Main $, а не класс Main
* в разделе «Настройки отладки» мой основной класс правильно определен как mypackage.Main
* Мой плагин обновлен и рекомендован для моей версии Eclipse
* очистка, перезапуск и т. д. не помогает. 

Тот же проект будет компилироваться со скалаком.

Спасибо за любые идеи о том, как решить эту проблему.

Правка: 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
    }
}
23
Thomas Heywood

Для меня проблема заключалась в том, что произошла ошибка сборки (см. Вкладку «Проблемы»), которая мешала компиляции; упс! Причина, по которой вы видите ошибку, состоит в том, что макрос запуска продолжается, несмотря на неудачный шаг компиляции, и пытается запустить файлы классов, которые он ожидает; они не существуют, потому что произошла ошибка сборки, препятствующая компиляции, поэтому он говорит, что не может найти Main (не скомпилирован).

Проблема исчезает, когда сборка может быть успешно завершена, то есть исправлены ошибки.

Я думаю, теоретически, могут быть более сложные причины, по которым ваша сборка не завершается успешно, которые не перечислены в разделе Проблемы.

21
ninjagecko

Одна возможность состоит в том, что вы пытаетесь запустить с помощью Ctrl-F11, но из другого класса.

Плагин Scala Eclipse не подчиняется настройкам по умолчанию для запуска Java. В Preferences-> Run/Debug-> Launching есть несколько опций Launch Operation-> Always Launch ранее выбранного приложения и т.д. Это в настоящее время не работает в плагине Scala Eclipse. Чтобы запустить указанный основной, вам нужно запустить его из редактора для класса.

Для этого была поднята ошибка. http://scala-ide.assembla.com/spaces/scala-ide/tickets/1000023-scala-launch--does-not-follow-jdt-behaviour

Правка: Это сейчас (в основном) исправлено.

5
Matthew Farwell

Для меня это была специфическая проблема Eclipse. Я заметил, что файл .class вообще не был создан. Так что каталог bin не имеет скомпилированных классов . Когда я вручную скомпилировал файл * .scala с использованием * .sbt и скопировал его в каталог bin, он работал как положено . Я попробовал разные советы и хитрости, и это т работал, пока я переустановил плагин Scala в Eclipse.

4
user1459144

Я бы решил аналогичную проблему, выполнив "Project-> Clean .." со следующим автоматическим построением.

2
Leon Rom

У меня было такое же сообщение об ошибке с приложением Java, сделанным мной самостоятельно.

Проблема заключалась в том, что я удалил (хотя и внутри Eclipse) банку, которая принадлежала пути сборки Java , не удаляя его из пути сборки Java (окно свойств проекта). Когда я сделал это, класс мог скомпилироваться и снова запустить.

1
bluish

Если вы используете Intellij, отметьте каталог как исходный корень

0
azzurolilc

Проверьте scala-ide.log

Для меня проблема была в том, что были ошибки:

AppData\Local\Temp\sbt_10d322fb\xsbt\ClassName.scala: 16: ошибка: не найдена: значение inputPhase ringPhase (currentRun.flattenPhase.next) {разделитель полного имени}

0
Daniel Sobrado

У вас есть правильная настройка инструмента сборки? Как sbt вы установили? 

Вы можете проверить его версию по $ sbt --version

Если он не настроен, вы можете скачать его здесь http://www.scala-sbt.org/download.html

Возможно, вам придется перезапустить Eclipse после установки. 

0
bugs

Убедитесь, что файлы .class существуют, как правило, в каталоге bin.

В частности, если у вас есть ошибки в несвязанных файлах в одном и том же проекте, компиляция может закончиться неудачей, и файлы .class не будут созданы.

0
starblue

Я столкнулся с этой проблемой. Я только что удалил имя пакета, создал класс scala, написал тот же код, установил Build на «Автоматическая сборка». Наконец, это прекрасно работает.

0
Ashiq Imran

Просто скопируйте свой код файла XXX.scala. Удалите пакет и создайте новый класс Scala. Вставьте свой код XXX.scala. (Если вы используете maven, выполните очистку и сборку maven.) Запустите конфигурацию снова. Это работает для меня.

0
Ashiq Imran

Может быть случай, когда проекты, содержащие ошибки, добавляются в путь сборки приложения, что предотвращает завершение успешной компиляции. Убедитесь, что вы удалили любой такой проект из пути сборки перед запуском приложения.

Удаление этих проектов решило проблему для меня. 

0
Maqsood Ahmad