web-dev-qa-db-ja.com

ビルドでメインクラスを設定する方法は?

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

ビルドでメインクラスを設定する方法

74
user312728

メインクラスは、パッケージで完全に修飾する必要があります。

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

これは実行時に機能し、パッケージタスクを使用するときにマニフェストにメインクラスを設定します。これらのタスクのメインクラスは、次のように個別に設定できます。

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

注意:

mainClass := Some("myPackage.aMainClass")

何もしません。これをビルドファイルに入れても、何もしないという警告は表示されません。

98
Rich Oliver

私の知る限り、sbtは、プロジェクト内の完全修飾クラス/オブジェクト名をここで期待しています。たとえば、メインクラスが次のような場合:

package prog

object Main extends App {
    // Hic sunt dracones
}

次のようにメインクラスを指定する必要があります。

mainClass := Some("prog.Main")

その型は単純に見つからないため、型エラーが発生します。

23
Lanbo