4

我正在使用以下文件夹结构:

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

以下是文件示例:

根.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>

父pom:

<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

我认为问题在于您在 pom.xml 中为 com.pack:parent 定义了对 com.pack:model 的依赖关系,它本身就是 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?

我注意到,在您的错误消息中,Maven 正在寻找一个1.0-SNAPSOT没有 H 的版本。这表明您的本地存储库中有一些来自先前本地安装运行的东西,我怀疑纠结的依赖关系导致 Maven 尝试分辨率的顺序与您期望的顺序不同,并且它在您的本地存储库中找到了一个副本,该副本引用了带有错字的版本。

于 2013-08-13T12:00:53.877 回答