Основной метод работает для Java, но не Scala - PullRequest
0 голосов
/ 24 января 2019

У меня есть модуль в intellij, где я могу создавать основные методы в java, которые отлично работают, но когда я создаю их в scala и пытаюсь их запустить, я получаю следующее:

Error: Could not find or load main class xxx

MyПроект опирается на классы Java и Scala.Что мне нужно сделать, чтобы запустить основные классы Scala?

РЕДАКТИРОВАТЬ:

В соответствии с просьбой, приведена выдержка из основного класса, который я пытаюсь запустить с помощью Scala.Я знаю, что в коде нет ничего плохого, потому что он работает, когда я инициализирую код в intellij как проект scala.Проблема здесь в том, что я начал с пустого проекта, поэтому я не знаю, что магические интеллигенты сделали за кулисами, чтобы основные классы Scala работали правильно.

object WebProxyServer extends Logging {

    def main(args: Array[String]): Unit = {

        // implementation

    }

}

class WebProxyServer() {

}

Ответы [ 4 ]

0 голосов
/ 25 января 2019

Самый простой способ запустить код Scala - создать object, который расширяет App, например:

object Main extends App {
  println("Hello World")
}

Scala выполнит весь код объекта при его создании. (Аргументы доступны в args члене App)

Чтобы запустить это из IntelliJ, выберите «Run-> Edit Configurations», затем нажмите «+» и выберите «Application» и заполните диалоговое окно. Раскрывающийся список для параметра «Основной класс» должен включать все объекты, которые расширяют App, поэтому выберите класс, который вы хотите запустить. Как только это будет сделано, ваш Main должен появиться в меню «Выполнить».

В меню Run может быть несколько классов, которые расширяют App, и несколько элементов. Я использую это для отладки определенных частей кода из IDE без запуска основной программы.


Вы также можете создать объект с помощью метода main, например:

object Main {
  def main(args: Array[String]): Unit = {
    println("Hello World")
  }
}

Как только это будет построено, вы можете добавить Main в качестве «Основного класса» в IntelliJ, как описано выше. Все объекты с методом main также будут отображаться в раскрывающемся списке «Основной класс».

Оба подхода приемлемы, но не комбинируйте оба. То есть не наследуйте от App, а затем переопределите метод main в App.

0 голосов
/ 24 января 2019

Чтобы добавить код Scala в существующий модуль Java в Intellij, щелкните правой кнопкой мыши имя модуля (обычно это папка верхнего уровня в представлении проекта) и нажмите «Добавить поддержку платформы», затем выберите Scala в списке параметров.

Чтобы добавить код Scala в новый модуль в проекте Intellij, выберите Файл -> Новый модуль и выберите Scala из списка параметров.

Если ваша структура каталогов выглядит следующим образом:

src
|
|-main
  |
  |-java
  | |-....java packages
  |
  |-scala
    |-....scala packages

Тогда не забудьте щелкнуть правой кнопкой мыши ваш каталог scala в представлении проекта и выбрать Пометить каталог как -> Источники Root

0 голосов
/ 25 января 2019

сначала попробуйте проверить конфигурацию SDK в вашей IDE, и если это вызывает ошибку.

object WebProxyServer {
  def main(args: Array[String]): Unit = {}
}

, затем попробуйте extends App и override ваш main(args: Array[String]), если необходимо

0 голосов
/ 24 января 2019

Убедитесь, что вы добавляете метод main к объектам, а не к классам. Основной метод должен быть статическим. Вы можете добавить сопутствующий объект, который является просто объектом с тем же именем, что и класс, чтобы он содержал метод main, если вы хотите добавить метод main к существующему классу.

class MyApp {
  // bad main method; will not run
  def main(args: Array[String]): Unit = println("hello world")
}

// companion object to MyApp class
object MyApp {
  // good main method; will run fine
  def main(args: Array[String]): Unit = println("hello world")
}
...