2016-09-26 15 views
1

私のsbtプロジェクトのカスタムタスクを書いてbuild.sbtに配置しました。 しかし、タスクのコードをファイルに分けてbuild.sbtからインポートしたいと思います。アイムタスクコードをbuild.sbtから分離する方法

compile <<= (compile in Compile) dependsOn myTask 

:私はこのようなものを使用することができ

lazy val myTask = taskKey[Unit]("my task") 

myTask := { 
    //doing task 
} 

が、私はbuild.sbt内からこのタスクをインポートすることができますかわからない:私はこのようなものが含まれていることmytask.sbtを作成しましたプラグインのコンセプトがあることを認識していますが、これは私のニーズにとって不幸です。私が望むのは、いくつかのコードを分離することだけです。

+0

あなたの質問で興味深い部分に実際に答えなかったので私の答えは削除されました...タスク定義で動作するようにしましたが、今は頭が痛いです。 –

答えて

2

あなたが使用している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がプロジェクトの一般的なビルドタスクであると判明した場合に便利です。

+0

私は、あなたが「タスクの論理をスカラーファイルで定義する」ということはsbtファイルではないと思います。とにかく答えてくれてありがとう、それは私のためにうまくいく。 – Vistritium

+0

ここに喜んで助けた。修正していただきありがとうございます、それは今修正されました。 –

関連する問題