11

私のマルチプロジェクト ビルドでは、結果として scct:test と scalastyle が順番に実行される検証タスクを作成しようとしています。トップレベルのプロジェクトではなく、すべてのサブプロジェクトに対して scct:test を実行したいと考えています。(トップレベルのプロジェクトで実行すると、そのプロジェクトにはソースもテストもないため、scct から「カバレッジ レポートを待っている間にタイムアウトしました」というメッセージが表示されます。) scct:test と scalastyle への依存関係。これはかなりバロックであることが判明しました。最上位の project/ ディレクトリの Build.scala は次のとおりです。

object MyBuild extends Build {
  val verifyTask = TaskKey[Unit]("verify", "Compiles, runs tests via scct:test and then runs scalastyle")
  val scctTestTask = (test in ScctPlugin.Scct).scopedKey
  val scalastyleTask = PluginKeys.scalastyleTarget.scopedKey

  lazy val root = Project("rootProject",
                      file("."),
                      settings =  Defaults.defaultSettings ++
                                  ScalastylePlugin.Settings ++
                                  ScctPlugin.instrumentSettings ++
                                  ScctPlugin.mergeReportSettings ++
                                  Seq(
                                    verifyTask in Global := {},
                                    verifyTask <<= verifyTask.dependsOn(scctTestTask, scalastyleTask)
                                  )
              ) aggregate(lift_webapp, selenium_tests)

  lazy val subproject_1 = Project(id = "subproject_1", base = file("subproject_1"))

  lazy val subproject_2 = Project(id = "subproject_2", base = file("subproject_2"))
}

ただし、検証タスクはルート プロジェクトに対してのみ存在するようです。実行すると、サブプロジェクトで同じタスクが実行されていません。これは私が望むものとは正反対です。各サブプロジェクトで scct:test と scalastyleを発行して実行したいsbt verifyのですが、最上位プロジェクトでは実行したくありません。どうすればそれを行うことができますか?

4

2 に答える 2

0

私は間違っているかもしれませんが、現在のプロジェクトに対してのみ検証タスクの依存関係を定義しています。

多分あなたは試すことができます:

Seq(
   verifyTask in Global := {},
   verifyTask <<= (verifyTask in Global).dependsOn(scctTestTask, scalastyleTask)
)

または、verifyTask 設定をすべてのモジュールに追加できます。

于 2013-08-25T09:50:35.617 に答える