Як встановити основний клас у побудові?


77

Після того, як 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

Як встановити основний клас у збірці?

Відповіді:


104

Основний клас повинен бути повністю кваліфікованим з пакетом:

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

Це буде працювати для запуску, і це буде встановлювати Main-Class в Manifest при використанні завдання пакета. Основний клас для цих завдань можна встановити окремо, як у:

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

Примітка:

mainClass := Some("myPackage.aMainClass")

нічого не робить. Якщо ви помістите це у свій файл збірки, ви не отримаєте жодного попередження про те, що він нічого не робить.


1
Зауважте так само, що mainClass in run := Some("myPackage.aMainClass")також нічого не робить.
tksfz

А що, якщо mainметод живе в класі, якого немає в жодному пакунку, наприклад, в App.class location [...] / src / main / scala / App.class?
Койкос

^^ mainClass in (Compile, run): = Some ("App")
0script0

23

Наскільки я знаю, sbtтут очікується повністю кваліфіковане ім’я класу / об’єкта у вашому проекті. Наприклад, якщо ваш основний клас такий:

package prog

object Main extends App {
    // Hic sunt dracones
}

тоді вам доведеться дати свій основний клас так:

mainClass := Some("prog.Main")

Ви отримуєте помилку типу, оскільки цей тип не просто знайдено.


15
За допомогою SBT 0.11.2 я виявив, що мені довелося встановити основний клас у сферах компіляції та виконання: mainClass in (Compile, run) := Some("prog.Main")
Річард Даллавей
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.