2017-12-18 4 views
0

私はsbtが新しく、アプリケーションをデプロイするか、をデプロイするためのスクリプトを作成しようとしました。すでに私の作品は何タスクを別のタスクに依存させるにはどうすればよいですか?

が正常に削除の場所への最終の.jarファイルを展開します

sbt deploy 

です。

しかし、deployAndRunTaskdeployTaskに依存させる方法はわかりません。私はいくつかのことを試しましたが、どれもこれまで働いていませんでした。

私の最後の希望は

deployAndRunTask := { 
    val d = deployTask.value 
} 

しかし、これは動作するようには思えないました。

これは私が現在行っているスクリプトですが、sbt deploy-rundeployAndRunTaskタスクだけを実行しますが、deyployTaskは実行しません。

// DEPLOYMENT 

val deployTask = TaskKey[Unit]("deploy", "Copies assembly jar to remote location") 

deployTask <<= assembly map { (asm) => 
    val account = "[email protected]" 
    val local = asm.getPath 
    val remote = account + ":" + "/home/user/" + asm.getName 
    println(s"Copying: $local -> $account:$remote") 
    Seq("scp", local, remote) !! 
} 

val deployAndRunTask = TaskKey[Unit]("deploy-run", "Deploy and run application.") 

deployAndRunTask := { 
    val d = deployTask.value 
} 

deployAndRunTask <<= assembly map { (asm) => 
    println(s"Running the script ..") 
} 

ここで問題は何ですか?

答えて

1

問題はあなたのタスクを定義してから、に再定義することです。したがって、後者の定義のみが考慮されます。タスク定義とその依存関係を別のタスクに分けることはできません。

  • 使用taskKeyマクロをし、それがキーの名前と同じですので、あなたは、タスク名を考える必要はありません:また、あなたは、SBTに時代遅れ物事のカップルを使用している

    val deploy = taskKey[Unit]("Copies assembly jar to remote location") 
    val deployAndRun = taskKey[Unit]("Deploy and run application.") 
    

    は、その後、あなたはbuild.sbtdeploydeployAndRun両方としてそれらを参照し、SBTシェルで

  • :=とで<<=を置き換えることができます0の場合はkeyname.valueとなります。物事はより簡潔で簡単に書くことができます。

Migrating from sbt 0.13.xについて詳しく読むことができます。だからここ

は、これらの変更を使用してdeployAndRunタスク定義です:

deployAndRun := { 
    val d = deploy.value 
    val asm = assembly.value 
    println(s"Running the script ..") 
} 

それはdeployassemblyタスクの両方に依存だと何かを行う前に、両方のそれらを実行します。 dependsOnも使用できますが、ここでは不要だと思います。

Defining a sequential task with Def.sequentialDefining a dynamic task with Def.taskDynに興味があるかもしれません。

関連する問題