0

私たちはMavenに比較的慣れていないため、現在問題に直面しています。

JAR が他のいくつかのプロジェクトに依存している Maven プロジェクト (projectA) があります。他のプロジェクトの一部はカスタム Web コンテナーですが、そうでないプロジェクトもあります。そのため、カスタム Web コンテナーの場合は projectA の依存関係 jar の一部が提供されますが、他のプロジェクトの場合はランタイム スコープである必要があります。現在、カスタム Web コンテナの場合、提供された jar を除外するために除外リストを使用しています。

Maven プロファイルを使用する方が良いかどうかは疑問です。異なる依存関係 (実際には同じ依存関係でスコープが異なる) でプロファイルを作成する方法を知っており、両方のプロファイルで、ビルドされた projectA jar はビット単位で同一です。しかし、私たちが知らないのは、projectA jar アーティファクトを Maven リポジトリにデプロイ/リリースするとき、pom.xml はどのように見えるべきかということです。これらの Web コンテナー プロジェクトの場合、pom.xml には提供された jar が含まれていませんが、他のプロジェクトの場合、pom.xml にはこれらの jar が含まれている必要があります。

各プロファイルで jar に異なる名前を使用し、それぞれを異なる pom.xml でデプロイできますが、これらの jar はビット単位で同一であるため、完全なソリューションとは思えません。そのため、この問題に対するより良い解決策が必要だと考えましたが、Maven に比較的慣れていないためわかりません。ありがとう。

4

1 に答える 1

0

POMはPOMです。「A」を参照する他のプロジェクトで推移的な依存関係を管理することについて話しているようです。Maven でのオプションはかなり制限されています。

  • 除外を使用して、不要な推移的な依存関係を削除できます。
  • 「A」で依存関係を「provided」として宣言できますが、これは本当に正しいのは、その jar が実際に A のターゲット環境で提供されている場合のみです。これは主に、コンテナによって提供され、WAR ファイルに含めることが禁止されている servlet-api などの Java EE API 依存関係を対象としています。
  • 依存関係をオプションとして宣言できます。これは、人々が「提供されている」と言うときに通常意味するものであり、必要な場所にそれらの依存関係を手動で含めることができます。

私は個人的に「オプション」ルートを選択します。なぜなら、必要な依存関係を取り込むのは各プロジェクトの仕事だからです。「A」を使用するときに何かがオプションである場合、「A」を使用するものは明示的に選択する必要があることを意味しますそのオプションの部分を使用します。これは、複数の異なるユース ケースを持つアーティファクトを構築する場合に最適な傾向があります。

この分野の追加のヘルプとして、maven エンフォーサ プラグインを使用してビルドから特定の依存関係を禁止し、不要な jar を誤って取得しないようにすることもできます。

于 2013-03-05T01:20:25.827 に答える