2016-07-17 3 views
0

boot Clojureプロジェクトのすべての依存関係を取得する場合は、build.bootファイルに次のいずれかのタスクを追加できます。このコードはどのようにして終了するのですか?

(deftask deps []) 

又は

(deftask deps [] (repl :server true)) 

後も挙げhereとしてREPLの依存関係を引っ張ります。

なぜこれが機能するのかわかりません。

なぜ空のボディタスクを作成すると、タスクはすべての依存関係を取り出すのですか?どのように(deftask z [] (comp (a) (b) (c))a b cの依存関係を引き出すだけですが、(deftask z [])はどうにかしてプルされますすべてbuild.bootで定義されたタスクの依存関係はありますか?それは魔法のようなものですか?もしそうなら、単にデフォルトの起動タスクとしてdepsを含めるのはなぜですか?

答えて

0

あなたはすでに回答をリンクしています。 nREPL サーバーが プロジェクトのコンテキストでREPLを持ちたいので、新鮮でない(ポッドで実行することはできませんので

Repl Depencencies

REPLタスクは、他のほとんどのタスクは異なっていますポッドコンテキスト)。したがって、replタスクは set-envを呼び出します。 が実際に使用されているときに実行時にnREPL依存関係を追加し、repl タスクが使用されていない場合、プロジェクトにはnREPL依存関係はありません。

これは、上記の方法がREPLを開始するために必要な依存関係 をフェッチしないことを意味します。これは、例えばDocker イメージを構築するときに問題になる可能性があります。ソリューションは、このような何かをすることです:

(deftaskは[]のDEP(REPL:真のサーバー))を明示的にあなたはそれがすべての必要な依存関係をダウンロードnREPLを使用するブートを伝える場合

。リンクされたセクションでは、これがどのように行われるかについても説明します。

したがって、replタスクはset-env!を呼び出します。

これは、アプリケーションに追加の依存関係がない可能性があるため、依存関係から独立して発生します。

関連する問題