1

Mavenプロジェクトがあります

  • 親プロジェクト (以下のモジュールを含む) (パッケージ タイプ pom)
    • API プロジェクト (パッケージ型 jar)
    • パッケージング プロジェクト (API プロジェクトに依存) (パッケージ タイプ カスタム)

他の人がそのコードを利用できるように、API プロジェクトを Nexus リポジトリにデプロイできるようにしたいと考えています。Packaging Project は、より小規模な展開のユース ケースをサポートするユーティリティ プロジェクトです。親プロジェクトは、すべてをまとめてくれます。

API プロジェクトを nexus リポジトリにデプロイすると、正常にデプロイされます。API に依存する新しいプロジェクトを作成しようとすると、nexus に API の依存関係が見つかりますが、親プロジェクトも必要になります。nexus リポジトリ経由で使用する場合、API ライブラリを使用する必要がないため、親プロジェクトの公開を回避する方法はありますか?

これをサポートするために私のmavenプロジェクトを整理する方法に関するヒントはありますか?

4

2 に答える 2

5

Maven プロジェクトへの参照を追加する<parent>と、「その親からすべての構成を取得し、それをモデルに注入してから、次のようにオーバーライドします」と言っています。

したがって、Maven がプロジェクトのモデルを構築するには、Maven が親自体を取得する必要があります。つまり、タグを追加する<parent>と、親と子の間に明示的な強い依存関係が作成されます。

良いニュースは、Inheritance が Aggregation に従う必要がないことです。それは正確にはどういう意味ですか?

集計は<modules>、pom にリストするときです。これは、reactor (つまり、Maven がビルドする一連のプロジェクト) に次の (サブ) プロジェクトも含める必要があることを Maven に伝えます。

継承は、プロジェクトの<parent>.

Maven は、プロジェクト<parent>がその子を としてリストする必要<modules>があることを強制しません。また、Maven は、<modules>プロジェクトがプロジェクトを としてリストする必要があることを強制しません<parent>

一部の人々はそのようにプロジェクトを設定します

ROOT/
 +- pom.xml
 +- parent/
 |   \- pom.xml
 +- api/
 |   \- pom.xml
 \- packaging/
     \- pom.xml

の親であり、ROOT実際には の子です。または、親のないスタンドアロン プロジェクトになる場合もあります [実際、これは私自身がよく使用するパターンです。いくつかの関連プロジェクトに取り組んでいるときは、ローカル ディスクに集約を投げて、それを IDE で開きます。これにより、実際のモジュールが異なるソースから来ている場合でも、すべての関連コードを 1 つの「プロジェクト」として利用できます。 ]apipackagingROOTROOTpom.xml

したがって、あなたの場合、解決策は<parent>「API」モジュールからタグを削除することです。

今!欠点があります。「API」モジュールからタグを削除する<parent>と、親プロジェクトが提供しているすべてのデフォルトが削除されるため、「API」プロジェクトに関連するデフォルトをコピーする必要があります。そうしないと、動作に微妙な変化が見られる場合があります。 . たとえば、プラグインのバージョンのピン留めと<dependencyManagement>、「API」の依存関係に関連するものは確実にコピーする必要があります。他にもコピーしなければならない部分がありますが、タグをmvn help:effective-pom削除する前後にMaven コマンドを使用して、効果的な違いを確認することをお勧めします。<parent>

于 2012-10-22T09:04:01.673 に答える