2017-04-13 11 views
1

ビルド/リリースプロセスをbuild.sbtで定義しています。私もbuild.sbtで使われているいくつかの定義を持つプロジェクト/ Build.scalaを持っています。 build.sbtを読みやすくするためにこれを行います。Build.scalaでSBTリリースタスクを定義する方法は?

私はいくつかの新しいタスクをreleaseProcessに追加しようとしています。

object StartService { 
    val myNewTask = taskKey[Unit]("Execute a CLI command") 
    myNewTask := { 
    streams.value.log.info(s"Executing command") 
    s"cmd $arg1 $arg2" ! 
    } 
} 

build.sbtは

releaseProcess := Seq[ReleaseStep](
... 
    releaseStepTask(StartService.myNewTask) 
... 
) 

解除コマンドを実行すると、私はmyNewTaskが定義されていない例外を取得しておくがありますように私はBuild.scalaでこれらのタスクを定義しています。 Build.scalaで定義されたタスクをインポートする正しい方法は何ですか?

java.lang.RuntimeException:/:myNewTaskは未定義です。 at scala.sys.package $ .error(package.scala:27) at sbt.Extracted $$ anonfun $ getOrError $ 1.apply(Extracted.scala:94) at sbt.Extracted $$ anonfun $ getOrError $ 1.apply (Extracted.scala:94) scala.Option.getOrElseで(Option.scala:120)

答えて

0

あなたは、あなたのプロジェクトにタスク定義を追加する必要があります。ただのオブジェクトであることによって、それは起こりません。最も簡単な方法は、設定をbuild.sbtに直接追加することです。

は自動的にあなたのプロジェクトのディレクトリにプラグインとしてそれを定義することができ、いくつかのプロジェクトに追加するには、次の

object SbtScaryPlugin extends AutoPlugin { 

    override def trigger = allRequirements 
    override def requires = JvmPlugin 

    object autoImport { 
    val myNewTask = taskKey[Unit]("Execute a CLI command") 
    } 

    import autoImport._ 

    override lazy val projectSettings = Seq(
    myNewTask := { 
     streams.value.log.info(s"Executing command") 
     s"cmd $arg1 $arg2" ! 
    } 
) 
} 
+0

おかげでプラグインを指すため。私は週末にタスク、設定、プラグインを理解し、解決策を思いついた。 – Cheeko

関連する問題