首页 > 解决方案 > Maven:为什么子项目在自己的目录中寻找父的仓库

问题描述

我在目录中有一个 Maven 子项目child。我local-lib在目录中还有一个父项目,child/local-lib其中包含一个带有 jar 的存储库。这就是完整的目录结构:

child/ # child project
    local-lib # parent project
        repo # local repo
        pom.xml # configuration of the parent project
    pom.xml # configuration of the child project

本地存储库声明child/local-lib/pom.xml

    <repositories>
        <repository>
            <id>repo</id>
            <url>file:///${project.basedir}/repo</url>
        </repository>
    </repositories>

子项目在child/pom.xml哪里引用其父项目,如下所示:

    <parent>
            <groupId>someGroup</groupId>
            <artifactId>local-lib</artifactId>
            <version>0.0.1</version>
            <relativePath>./local-lib</relativePath>
    </parent>

当我键入mvn clean install子项目时,即在目录child中,子项目尝试搜索不存在的存储库child/repo,而不是child/local-lib/repo. 但是,用我磁盘上的完整路径替换${project.basedir}in会使子项目使用正确的存储库。这反过来,像以前一样放置,但有额外的:child/local-lib/pom.xmlchild/local-libchild/local-lib/repochild/local-lib/pom.xmllocal-lib

    <repositories>
        <repository>
            <id>repo</id>
            <url>file:///${project.basedir}/local-lib/repo</url>
        </repository>
    </repositories>

如果我使用目录中的 maven,这次可以正常工作child,但如果我直接使用child/local-lib/pom.xmlfrom则不能child/local-lib。后者创建local-lib包含两次的路径。

为什么在存储库定义的情况下,${project.basedir}有时指向子目录pom.xml,而不是它自己的目录pom.xml?是否有无条件指向pom.xml自己的目录的属性?如果不是,那背后的动机是什么?

标签: maven

解决方案


推荐阅读