Как установить основной класс в сборке?

В sbt run у меня есть несколько вариантов основного класса.

Я хотел бы установить основной класс, поэтому я написал в build.sbt:

mainClass := Some("aMainClass")

Но sbt не работает:

build.sbt:1: error: not found: value aMainClass

Я также пробовал файл project/Project.scala:

import sbt._
  class ExecutableProject(info: ProjectInfo) extends DefaultProject(info)  {
  override def mainClass = Some("aMainClass")
}

ошибка:

 project/Project.scala:3: not found: type aMainClass

Как установить основной класс в сборке?

Ответ 1

Основной класс должен быть полностью укомплектован пакетом:

mainClass in Compile := Some("myPackage.aMainClass")

Это будет работать для запуска, и он будет устанавливать Main-Class в манифесте при использовании задачи пакета. Основной класс для этих задач можно установить отдельно, как в:

mainClass in (Compile, run) := Some("myPackage.aMainClass")

mainClass in (Compile, packageBin) := Some("myPackage.anotherMainClass")

Примечание:

mainClass := Some("myPackage.aMainClass")

ничего не делает. Если вы поместите это в свой файл сборки, вы не получите предупреждения о том, что он ничего не делает.

Ответ 2

Насколько я знаю, sbt ожидает здесь полностью квалифицированного имени класса/объекта в вашем проекте. Например, если ваш основной класс выглядит следующим образом:

package prog

object Main extends App {
    // Hic sunt dracones
}

тогда вам нужно будет указать свой основной класс следующим образом:

mainClass := Some("prog.Main")

Вы получаете ошибку типа, потому что этот тип не просто найден.