あなたが使用しているsbtのバージョンについては言及していないので、次の回答はバージョン0.13.12に基づいています。
私の知る限り、タスクはsbtファイル、プラグイン、またはBuild特性を拡張するscalaファイルオブジェクトのいずれかに定義する必要があります。 は、私は私の視点から、あなたはこれらのオプションを持っているので、1つのSBTファイルで何かを定義し、他にそれを使用するために、その可能性はないと思う:
ビルドトレイト に物事のこの方法を拡張しますsbtのそれ以降のバージョンでは非推奨になっているので、私はその中には入っていません。
タスクのロジックをスカラーファイルで定義します。 タスクの宣言とロジックを分割して、タスクをsbtビルドファイルで宣言し、そのロジックをスカラーファイルに移動させることができます。次に、あなたのビルドファイルはこのようなことができます:タスクの
import CommonBuildCode._
val myTask = taskKey[Unit]("my task")
myTask := {
myTaskPerform()
}
compile := {
myTask.value
(compile in Compile).value
}
そして、あなたのロジックは、私はこれがあなたのために十分であろうことを知っていないファイルプロジェクト/ CommonBuildCode.scala
import sbt._
object CommonBuildCode {
def myTaskPerform(): Unit = {
println("-------------------------- myTask called --------------------------")
}
}
になる可能性しかし、build.sbtファイル内のmyTaskタスクに関する行数を最小限に抑えることができます。
SBTとプラグインを作成すること そのかなり簡単、簡単なプラグインを作成し、これはあなたが求めて何に非常に近い結果が得られます。プロジェクトが有効になっている場合
import sbt._
object MyTaskPlugin extends AutoPlugin {
object autoImport {
val myTask = taskKey[Unit]("my task")
}
import autoImport._
override def projectSettings = Seq(
myTask := {
println("--------------- myTask called from a plugin------------------")
}
)
}
、自動インポートプロジェクトの下で何が自動インポートして、sbtのビルドファイルで使用するために利用できる、とすべての設定がで設定されます。まず、次のようにファイルプロジェクト/ MyTaskPlugin.scalaを作成projectSettingsメソッドが適用されます。だから今、あなたがあなたの中に行う必要がある唯一のものは、ファイルをbuild.sbt、プラグインを活性化することである。
プラグインを使用して、余分なボーナスは、そのにプラグインをリファクタリングする非常に簡単になるということですjarファイルを公開することができます。jarファイルは他のプロジェクトで簡単に有効になります。これは、myTaskがプロジェクトの一般的なビルドタスクであると判明した場合に便利です。
あなたの質問で興味深い部分に実際に答えなかったので私の答えは削除されました...タスク定義で動作するようにしましたが、今は頭が痛いです。 –