2

次のような 3 つのサブプロジェクトを含むプロジェクトがあります ( lein-subを使用):

(defproject trident "0.1.0"
  ...

  :sub
  ["admin"
   "api"
   "site"])

それぞれの内部に次のようなリング ハンドラーがあります。

(defproject trident-api "0.1.0-SNAPSHOT"
  ...

  :ring {:handler trident.api.core/handler
         :servlet-name "trident-api"
         :init trident.api.core/init
         :port 33333})

今、私はそれぞれに行き、次のように入力します:

> lein ring server

これは明らかに疲れます。私も試しました

> lein sub ring server

これは機能するはずですが、最初のものを開始するだけで、プロセスがそれに参加します! おそらくそれを回避する方法はありますか?これが最も簡単なアプローチのようです。

その代わりに、これを行うための leiningen タスクを作成していますが、いくつかの問題が発生しています。leiningen.core.project/read を使用して、それぞれのプロジェクト ファイルを簡単に取得できますが、ここから、それぞれの project.clj ファイルのすべての依存関係とその他の設定を尊重する方法で各リング サーバーを起動するにはどうすればよいでしょうか?

何か案は?

4

2 に答える 2

0

最終的に、3 つの jetty インスタンスすべてを一度に開始するメタサーバーを構築しました。コードはここにあります:

https://github.com/antler/lein-caribou/blob/master/src/leiningen/caribou/server.clj

于 2012-09-19T19:53:54.650 に答える
0

これが機能するかどうかは現時点では確認できないため、これは単なる提案です。

leiningen.core.projectデフォルト値を識別するvar があります。たぶん、プラグイン (またはフォーク lein-sub?) を作成して、サブ プロジェクトのこれらの値をオーバーライドすることができますか? 次に、特定のタスクを各サブ プロジェクトに適用しながら、各サブ プロジェクトを反復処理するプラグインを作成できます。

たとえば、デフォルトではソース パスが次のように宣言されます。

:source-paths ["src"]

次に、サブプロジェクトごとに次のようにオーバーライドできます。

:source-paths ["sub-project/src"]

関連するすべてのデフォルトでそれを行うと、うまくいくかもしれません。

Leiningen 2 のプロファイルでこれを行う方法があるかもしれませんが、よくわかりません。親プロジェクトのサブ プロジェクトごとにプロファイルを作成すると、それぞれのサブ プロジェクトでタスクを呼び出すときにプロファイルを簡単にマージできると思います。

于 2012-05-11T18:41:22.487 に答える