私が理解しているようにnrepl-jack-in
、REPLを実行すると、project.cljで定義されているすべての依存関係とともにREPLがロードされます。次に、project.cljを更新して新しい依存関係を追加する場合、サーバーを強制終了して再実行するnrepl-jack-in
必要がありますか、それとも現在のREPLの依存関係を更新する方法がありますか?
3 に答える
更新:おそらくいくつかの希望があります。https://github.com/cemerick/pomegranateを参照してください
以前:
簡単な答えは「はい」です。JVMプロセスを再起動する必要があります。
ライブ担当者の依存関係を更新する良い方法がないことを認識しています。Leiningen(nrepl-jack-inによって呼び出されます)は、依存関係を管理し、再起動時にのみクラスパスを設定します。ダイナミックで賢いことをしようとすると、ひどく壊れやすくなります。
以下の打ち消されたテキストは事実上真実ですが、一瞬の反省で、私はそれをそのようにマークしたような悪いアドバイスのように見えました...
ローカル依存関係(jarファイルなど)がある場合は、replで長時間非推奨の関数を使用する可能性があります。add-classpath
しかし、あなたはJavaクラスローダーのドラゴンがはびこる沼に入るでしょう。
REPLを再起動するのが最も簡単な方法のようです。これは次の方法で実行できます。
M-x cider-restart
それはまた、を達成するように見えますlein deps
。したがって、新しい依存関係を追加するプロセス全体では、をに追加してrequire
からproject.clj
を呼び出すだけcider-restart
です。
もう1つの(非常に便利な)方法は、
clj-refactorを使用することです。アーティファクト(C-c m a p
または)を追加するcljr-add-project-dependency
と、必要なバージョンの入力を求められ、新しい依存関係がファイルに自動的に挿入され、セッションがリロードされます。project.clj
ザクロが存在する前は、依存関係を動的にロードするために独自のライブラリを作成しました。
https://github.com/bmillare/dj
lein2のリリースと、それがどのようにザクロを使用できるかを確認した後、私はdjを書き直してこれを下で使用しました。したがって、「dj」を使用しない場合でも、それが何をしているのかを確認するための参照として役立つ場合があります。