24

私はMavenが初めてです。次の構造を持つマルチモジュールのmaven 2プロジェクトがあります(やや簡略化されています):

Project (POM packaging)
  |
  +-- Module1 (JAR)
  |     |
  |     +-- src
  |          |
  |          +-- main
  |               |
  |               +-- java
  |               +-- resources
  |
  +-- Module2 (JAR)
  |      |
  |     ...
  |
  +-- Web Module (WAR)
         |
        ...

Maven Jetty プラグインを含めるように Web モジュールを構成しました。これは、プロダクション成果物を構築するのに最適です。開発のために、mvn install変更したすべてのモジュールを呼び出す必要があることを発見し、続いて jetty を停止してからもう一度 jetty:run を呼び出しました。
プラグインが各モジュールのターゲット ディレクトリから直接変更を取得する方法があれば、はるかに生産的になります。jetty プラグインのドキュメントによると、そのような機能があるようですが、これは WAR モジュールにのみ適用されるようです。
私にとってさらに重要なことは、jetty を再起動せずにリソース ファイルを変更できることです。これは、ほとんどのリソースが HTML テンプレート ファイルであり、変更を確認するために再起動する必要がなく、開発中にテンプレートを設計および更新する方が生産性が大幅に向上するためです。

では、jetty プラグインのクラスパスを設定して、ローカル リポジトリ内の実際の JAR ではなく、各 JAR モジュールのターゲット/クラスおよびリソース ディレクトリを含める方法はありますか?

ありがとう!
ヤニフ

4

5 に答える 5

7

これは、マルチモジュール Maven プロジェクトでは不可能です。Maven プロジェクトの基本的なルールは、各プロジェクトが独立していることです。それはそれらが一緒にビルドされることを妨げるものではありませんが、すべての依存関係が満たされている限り、どのプロジェクトもそれ自体でビルドできるはずです。

この場合、WAR プロジェクトは、他のプロジェクトを更新する必要があるかどうかを確認することができないことを意味します。それらの他のプロジェクトの POM は、アーティファクトをビルドするために何をする必要があるかの決定的な宣言です。アーティファクトがビルドされると、ローカル リポジトリに配置されます。その時点では、ソース ファイルとアーティファクトの間に関連性がないため、WAR が依存するアーティファクトの再構築をトリガーするソース ファイルを特定する方法はありません。

于 2010-12-07T03:33:45.400 に答える
3

Eclipse では、「Run Jetty」プラグインを使用してこれを実現できます。
IDEA の実行構成には、[ワークスペースのアーティファクトを解決する] オプションがあります。チェックしてください。

于 2013-07-16T07:10:20.817 に答える
2

M2Eclipse (Eclipse 内で Maven を緊密に統合するための Eclipse プラグイン) を使用する場合、Web モジュールで jetty:run ゴールを実行でき、他の依存関係がまったく考慮されていなくても、ワークスペースから考慮されます。ローカル リポジトリで利用できます。

実行には、ワークスペース自体でモジュールを解決するように Maven に指示するオプションがあります (デフォルトでは、ローカル リポジトリにデプロイされているものをフェッチするだけです)。

残念ながら、IDEA で同じ動作を行うことはできず、web モジュールで jetty:run を実行する前にインストールを実行する必要があります。

于 2011-02-10T19:03:45.183 に答える
1

この回答に基づく:ベスト プラクティス wrt。「mvn install」、マルチモジュール プロジェクト、および 1 つのサブモジュール の実行 Maven の恐ろしい制限とリアクターの制限を回避するには、skip true を使用して親 pom でプラグインを定義し、skip false を使用してそれぞれのサブモジュールでプラグインを再度有効にします。

于 2016-03-24T12:19:32.543 に答える