2013-06-26 36 views
28

私はいくつかのモジュールを含むmavenプロジェクトを持っています。 Eclipse(Juno、m2e)ではコンパイルがうまくいくようです。しかし、モジュールの1つにmavenをインストールすると、ビルドはただちに失敗します。'dependencies.dependency.version'にはエラーがありませんが、バージョンは親で管理されています

親ポンポン:

<groupId>com.sw.system4</groupId> 
    <artifactId>system4-parent</artifactId> 
    <version>${system4.version}</version> 
    <packaging>pom</packaging> 
    <name>System 4 Parent Project</name> 
    <modules> 
    <module>system4-data</module> 
    ...others... 
    </modules> 
    <properties> 
    <system4.version>0.0.1-SNAPSHOT</system4.version> 
    <spring.version>3.2.3.RELEASE</spring.version> 
    ... others... 
    </properties> 

    <dependencyManagement> 
    <dependencies> 
     <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>${spring.version}</version> 
     <scope>runtime</scope> 
     </dependency> 
    ... lots of others ... 
    </dependencies> 
    </dependencyManagement> 

児童ポンポン:

<parent> 
    <groupId>com.sw.system4</groupId> 
    <artifactId>system4-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <artifactId>system4-data</artifactId> 
    <dependencies> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <scope>runtime</scope> 
    </dependency> 
    ... lots of others... 
    </dependencies> 

私はビルドすると、私は次のような出力が得られます。

[ERROR] The build could not read 1 project -> [Help 1] 
[ERROR] 
[ERROR] The project com.sw.system4:system4-data:0.0.1-SNAPSHOT (C:\work\eclips 
e_workspaces\systemiv\system4-parent\system4-data\pom.xml) has 8 errors 

[ERROR]  'dependencies.dependency.version' for org.springframework:spring-cor 
e:jar is missing. @ line 16, column 16 

... others omitted for clarity ... 

私はそれもしない理由を理解しませんコンパイルを試みる。 Iveは親と子からランタイムスコープを削除しようとしましたが、違いはありません。助けてください!

+0

[dependenciesが既にその親のpomファイルの依存関係管理セクションで宣言されていても[dependencies.dependency.versionが存在しません]の重複があります(http://stackoverflow.com/questions/12900525/dependencies-dependency-version-is) -missing-even-though-dependency-is-already) – JohnEye

答えて

31

カップルの事私はあなたが試みることができると思う:

  1. 入れただし回避策はあり

    子のバージョンのリテラル値 pom

    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
        <version>3.2.3.RELEASE</version> 
        <scope>runtime</scope> 
    </dependency> 
    
  2. 通常はC:\ Users \ user.m2 \ repositoryにある.m2キャッシュをクリアします。私がmavenで働いているとき、私はこれをかなり頻繁に行うと言います。特にコミットする前に、私はよりCIが実行されるようになることができます。毎回フォルダを破る必要はありません。プロジェクトパッケージと.cacheフォルダだけで十分です。

  3. はあなたのPOMS中8つのトータルの誤差を持っているように見えます

    <parent> 
        <groupId>com.mycompany.app</groupId> 
        <artifactId>my-app</artifactId> 
        <version>1</version> 
    <relativePath>../parent/pom.xml</relativePath> 
    </parent> 
    

あなたの親ポンポン宣言にrelativePathタグ​​を追加します。親のpomとプロパティを追加する前に、いくつかの基本的なコンパイルを実行しようとします。

+0

私が除外した他の7つのエラーは、すべて同じ種類のものでした。つまり、dependencies.dependency.versionは(その他の依存関係)にはありません。 – fancyplants

+3

は私の鍵でした:1つのモジュールはデフォルトの子にはありませんでした1つのサブディレクトリより深い。ありがとう。 – Glenn

+1

Mavenが依存関係を失っていると言う別の理由は、親pomで宣言された依存関係が、子のpomが探している型に対応しないを持つ場合です。 – zdenekca

1

理論上、mavenでは親バージョンを設定するためにプロパティを使用することはできません。

あなたのケースでは、mavenは、親POMの0.0.1-SNAPSHOTバージョンが現在あなたのプロジェクトにあるものであることを単に知ることができないので、あなたのローカルリポジトリで見つけようとします。それはスナップショットであるため、おそらく見つかるでしょうが、おそらくあなたのDependency Managementセクションが含まれていない古いバージョンです。

は、単にこれを子ポンポンで親セクションを変更します:

<parent> 
    <groupId>com.sw.system4</groupId> 
    <artifactId>system4-parent</artifactId> 
    <version>${system4.version}</version> 
    <relativePath>../pom.xml</relativePath> <!-- this must match your parent pom location --> 
</parent> 
+0

問題は、親プロジェクトにokをコンパイルする他のサブプロジェクト(モジュール)があることです。 relativePath defaultは、親のpomの位置を正しく指しています。 – fancyplants

1

右は、髪が引き裂かれた後、私はコンパイルシステムを持っています。私が作った過ちの.m2キャッシュをクリーニング

(ブライアンのおかげで)助けた一つのことだった

一つの親ポンポンdependencyManagementセクションで各依存関係の2つのバージョンを置くことだった - <scope>runtime</scope>と1と1これは、コマンドラインで実行できるだけでなく、Eclipseを幸せにする(つまり、不正なコンパイルエラーを表示しない)ことでした。これはちょうど問題を複雑にしていたので、私は実行時のものを削除しました。明示的に親のバージョンを設定

も動作するように見えた(それはMavenのは、このような特性を利用するための、より幅広いサポートを持っていないことを恥だ!)

<parent> 
    <groupId>com.sw.system4</groupId> 
    <artifactId>system4-parent</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    </parent> 

私はその後、 "奇妙ななっていましたコンパイルした他のモジュールと同じように設定されているにもかかわらず、親モジュールを見つけることができないと言って、すべての依存モジュールの「子モジュールのエラー」の依存関係を収集できませんでした。

私は最終的に各モジュールを個別にコンパイルしようとするのではなく、親のpomからコンパイルすることで物事を解決しました。これは私に、違ったモジュールで比較的簡単な修正を加えたというエラーを教えてくれました。不思議なことに、それはすべてコンパイルされました。

つまり、子モジュールAに関するmavenエラーが発生した場合、実際には関係のない子モジュールZに問題がある可能性があります。

+0

ローカルリポジトリ全体をクリーニングするのはちょっと過激な解決策です...あなたのプロジェクトが関係するサブツリーを削除するだけで十分です。 同じテーマの別の投稿:http://stackoverflow.com/questions/2389602/maven2-cannot-find-parent-from-relative-path – Yanflea

5

誰もが同じ問題を抱えているのであれば、私の問題は、子供のpomからコピーした依存性のタグを<dependencyManagement>で見つけられなかったということでした。

+0

と私はいつもdependencyManagementタグの使用が今まで何の疑問を抱いていましたか?これは私のために働いた..私は親のポンでこのタグが不足していた。 –

+1

あなたも私を救った!ありがとう – madz

0

あなたは子モジュールを実行する前に親モジュールを構築する必要があり、子供のプロジェクト/親/バージョンのノードは、その親のプロジェクト/バージョン値と一致する値にしてください

0

.m2フォルダ内のsettings.xmlを削除するだけでした。このファイルは、存在しなかったspring mvcとwebのバージョンを探すようプロジェクトに指示していました。

関連する問題