4

次のフォルダー構造を使用しています。

SpringMvcExample
               \_ pom.xml (root pom)
               \_ parent
                        \_ pom.xml (parent pom)
               \_ model 
                        \_ src
                        \_ pom.xml (child pom)

ファイルの例を次に示します。

root.pom:

 <groupId>com.pack</groupId>
    <artifactId>SpringMvcExample</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <name>SpringMvcExample</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <defaultGoal>package</defaultGoal>
    </build>
    <modules>
        <module>parent</module>
        <module>model</module>
    </modules>

親ポン:

<modelVersion>4.0.0</modelVersion>
    <groupId>com.pack</groupId>
    <artifactId>parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>parent</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.pack</groupId>
            <artifactId>model</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

モデルポン:

<modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.pack</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../parent</relativePath>
    </parent>
    <groupId>com.pack</groupId>
    <artifactId>model</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>model</name>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

モデル フォルダーから mvn clean install を呼び出そうとすると、次のエラーが発生します。

[ERROR] Failed to execute goal on project model: Could not resolve dependencies for project com.pack:model:jar:1.0-SNAPSHOT: Could not find artifact com.pack:model:jar:1.0-SNAPSOT -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project model: Could not resolve dependencies for project com.pack:model:jar:1.0-SNAPSHOT: Could not find artifact com.pack:model:jar:1.0-SNAPSHOT

解決するにはどうすればよいですか?

更新: すべての人が同じ構造に遭遇したわけではないため、これについて説明しているブログへのリンクと、その利点と欠点を次に示します。そして、これが私が再利用しようとしている例です。

4

3 に答える 3

1

親 pom が子モジュールに依存している理由は、削除してから試してください。

理由:このモジュールをビルドすると、最初にビルドを成功させるために子 (model-1.0-SNAPSHOT) jar を必要とする親をビルドしようとします (依存関係を提供したため)。これまで、子モジュールはビルドされていませんでした。そのアーティファクトは利用できません。

詳細については、ビルド順序が Maven Reactor によって決定される方法をご覧になることをお勧めします。

仕様から:

  • ビルド内の別のモジュールに対するプロジェクトの依存関係
  • プラグインがビルド内の別のモジュールであるプラグイン宣言
  • ビルド内の別のモジュールへのプラグインの依存関係
  • ビルド内の別のモジュールでのビルド拡張宣言
  • 要素で宣言された順序 (他の規則が適用されない場合)
于 2013-08-13T12:34:04.613 に答える
0

問題は、com.pack:model の親である com.pack:parent の pom.xml で com.pack:model への依存関係を定義したことだと思います。com.pack:model をビルドするとき、maven はモデルの親 pom を調べ、com.pack:model への依存関係を見つけます。Mavenがリポジトリでjarを見つけられない前にプロジェクトをビルドしたことがないためです。

親 pom.xml から com.pack:model への依存関係を削除することをお勧めします。親は、その子プロジェクトのいずれかに依存するべきではありません。

于 2013-08-13T11:59:56.250 に答える
0

手始めに、親 POM は通常、「root.pom」と呼んでいるものでなければなりません。モジュールは、親のディレクトリ内にある必要があります。「ルート」のモジュールとして「親」と「子」を持つことは意味がありません。ルート POM はそれが「子」の親であると言っていますが、「子」POM は「親」がその親であると言っています。Maven の親 POM に慣れていないのではないでしょうか?

1.0-SNAPSOTエラー メッセージで、Maven はH のないバージョンの を探していることに注意してください。予想とは異なる順序で解決され、タイプミスのあるバージョンを参照する何かのコピーがローカルリポジトリに見つかります.

于 2013-08-13T12:00:53.877 に答える