Maven无法解决依赖关系,因为未找到父jar

时间:2018-11-14 23:07:11

标签: maven pom.xml dependency-management

我正在使用继承的pom启动Maven项目。

该项目的父pom是这样的:

<artifactId>service-parent</artifactId>
<groupId>group.parent</groupId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>

<modules>
    <module>child-of-parent</module> ...
</modules>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
    ...
</dependencies>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>
        ...
    </dependencies>
</dependencyManagement>

因此,在子模块中,如果我理解得很好,部分依赖项将自动继承,而部分依赖项必须在child的pom中声明。我将其写在孩子的pom中:

<parent>
    <artifactId>service-parent</artifactId>
    <groupId>group.parent</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>service-child</artifactId>
<groupId>group.child</groupId>
<packaging>pom</packaging>

<modules>
    <module>child-of-child</module>
</modules>

<dependencies>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>
</dependencies>

此子模块具有自己的子模块。因此,第三级pom受到打击:

<parent>
    <artifactId>service-child</artifactId>
    <groupId>group.child</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<artifactId>service-child-child</artifactId>

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>service-child</artifactId>
        <version>${project.version}</version>
    </dependency>
</dependencies>

有点像这样的连线,因为在pom的开头,它已经具有与依赖项相同的标记。这是因为如果我在其父级中复制依赖项,则会出现重复警告。 当我运行maven clean install时,它说

  

无法对项目service-child执行目标:无法解决项目service-parent:service-child:jar:1.0-SNAPSHOT的依赖项:   以下工件无法解决:   group.child:service-child:jar:1.0-SNAPSHOT,   group.parent:service-parent:jar:1.0-SNAPSHOT:找不到工件   group.child:service-child:jar:1.0-SNAPSHOT

我知道这是一种聚合方式,而不是继承方式,但是我以后更喜欢这种方式,我想逐个模块测试和运行模块(我尝试通过删除父poms中的modules声明来尝试继承方式,并且确实起作用了)。你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

这是因为service-child的类型(包装)是pom而不是jar

不可能有一个带有jar封装且带有子模块的项目。

如果仍然需要声明该依赖关系,请使用以下声明-注意type元素,其值为pom

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>service-child</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

该声明不会带来任何新的依赖关系,因为service-child-child已经从其父service-child继承了所有依赖关系。

请查看Introduction to the POM - Project Inheritance,以获取有关Maven中继承和聚合的更多信息。