2012-01-13 12 views
0

私たちは社内フレームワークプロジェクトの1つをantからmavenに変換しました。 Mavenビルドは正常に動作し、問題なしでリポジトリにデプロイします。mavenフレームワークのトップレベルpomの設定方法

問題は、他のプロジェクトがフレームワークを消費しようとしたときに問題になることです。動作しません。ダウンロードされるのはトップレベルのフレームワークです。

いくつかの依存関係のエントリを1つ以上のさまざまなモジュールに追加しようとしましたが、どのモジュールを追加しても循環依存エラーが発生します。また、リポジトリマネージャの1つを上書きするためにモジュールといくつかの依存関係のない2番目のトップレベルpomファイルを作成しようとしました。これにより、いくつかの依存関係がダウンロードされますが、Mavenビルドはランダムな場所でハングします。 Windowsタスクマネージャに基づいて、それは無限ループのように見えます。したがって、2番目のpomファイルは答えではないようです(または間違っています)。トップレベルのポンポン用

<project> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <packaging>pom</packaging> 
    <name>SFP framework</name> 
    <version>6.3</version> 

    <modules> 
.... 50+ modules here 
    </modules> 

、その後、通常のプロパティ、依存関係の管理とpluginManagementエントリ:

私のフレームワークのポンポンファイルは、次のようになります。かかるモジュールで

私は、次があります。

<dependency> 
    <groupId>framework_snt</groupId> 
    <artifactId>SFP</artifactId> 
    <version>6.3</version> 
    <type>pom</type> 
</dependency> 

これはトップレベルのポンポンであるので、すべてのサブモジュールは、開発者にそれを容易にするためのフレームワークライブラリへのアクセス権を持っています。

どのようにすれば、依存するjarファイルがすべて私のプロジェクトでダウンロードされるように設定できますか?

答えて

2

あなたのフレームワークプロジェクトは、いくつかのjarアーチファクトを生成するように聞こえますが、各子モジュールごとに1つですが、親プロジェクトのjarアーチファクトはありません。したがって、親プロジェクトのpomへの依存関係を宣言することは、あなたがしたいことではありません。代わりに、それぞれのフレームワークプロジェクトの子モジュールに依存関係を宣言する必要があります。

私は、いくつかのモジュール(それぞれがjarアーティファクトを生成する)を持つ "ツールキット"プロジェクトを持っているのと同様の設定をしています。そして私の他のプロジェクトでは、私が使用する必要があるモジュールの依存関係を宣言します。私は、しかし、私の "ツールキット"親プロジェクトのPOMファイルに依存関係を宣言しません。代わりに、私はちょうど子モジュールのjar成果物の依存関係を宣言します。あなたがやったように私の子モジュールのの1に私の依存関係の宣言ポイントとは<type>pom</type>を宣言しない

<dependency> 
    <groupId>com.mycompany.toolkits</groupId> 
    <artifactId>file-utils</artifactId> 
    <version>1.0.0</version> 
</dependency> 

注意してください。あなたが本当に明白になりたければ、<type>jar</type>を代わりに宣言することができます。

+0

はい、これは実現するための1つの方法ですが、私たちの既存のantビルドを変換するとき、皆は "フレームワーク"を含め、50個のjarファイルを常に利用できるようにすることに全員が慣れています。 – Jon

+0

私は、子モジュール(「framework-all」などと呼ばれる)が他のすべての子モジュールの依存関係を宣言するように試みることができます。そうすれば、開発者はこの1つの子モジュールに依存関係を宣言することができ、他のものは推移的な依存関係として扱います。 – BenjaminLinus

+0

私はこれにバリエーションを使用して終了しました。私はトップレベルのアグリゲーターポームを構築し、展開するために使用しました。 GAVはアプリケーションが使用するのと同じではありません。それから私は新しいフォルダに新しいpomを作成しました。これには、アプリケーション用の「正しい」GAVが含まれ、モジュールはなく、依存関係のみが含まれます。これまでのところ – Jon

-1

frameworkあなたが呼んでいるように、マルチモジュールプロジェクトのparentがあります。

モジュールは互いに依存することができますが、この親pomに依存することはできません。これはおそらく循環依存を引き起こしているものです。

モジュールを見直し、どのモジュールが依存しているかを特定し、依存関係を適切に指定する必要があります。また、これらの依存関係は、通常、依存関係 - ソースとリソースを含むパッケージングである - jarです。

Maven By Exampleは、さらなる情報を提供する多くのリソースの1つです。

+0

本当に役に立たないですが、お試しいただきありがとうございます。私はまだ、他のプロジェクトがフレームワークとそれに依存するすべてのjarファイルを消費する方法が必要です。 – Jon

+0

@Jonあなたはワイルドカードのアプローチを探しているようです。パッケージ化タイプの依存関係をpomとして含めることはできません。 –

+0

@Keerthi - 実際に私は依存関係としてpomを持つことができます。私は第三者の図書館のマルチモジュールプロジェクトに幅広く使用しています。それから私は、コンシューマプロジェクトに1つのエントリしか持たず、コンシューマーのpomファイルをもっときれいにします。しかし、jarファイルをビルドしているこの場合、同じアプローチがうまくいきません。 – Jon

関連する問題