Maven使用子POM中的子路径解析哪些URL?

Gar*_*son 10 java maven

我在某处读到如果Maven项目使用继承,那么它的子项目将使用子项目自动向URL添加子路径artifactId.但现在我找不到参考.

哪个继承的URL将Maven从父POM逐字继承,并且它将为子POM添加子路径?例如,以下是我可以找到的一些网址:

  • <project><url>
  • <project><scm><url>
  • <project><distributionManagement><site><url>

也许我错了,他们都没有添加一个子路径,但我在笔记中有它.不幸的是,我似乎找不到使用互联网搜索的确定答案.

请尝试在答案中提供权威参考.(当然,如果没有相关的文档,直接测试将是第二好的.)在此先感谢.

def*_*ale 6

所有这些元素都在maven XSD架构中定义,该架构已正确记录(xs:documentation标签).

这是url的文档:

project.url (第102行):

项目主页的URL.
默认值为:父值[+路径调整] +(artifactId或project.directory属性)

路径调整仅在子项目的路径与其artifactid不匹配时适用.

project.directory是一个属性,您可以在properties标记中覆盖它.

site.url (第544行):

表单中部署网站的位置的URL protocol://hostname/path.
默认值为:父值[+路径调整] + artifactId

scm.url (第823行):

项目可浏览的SCM存储库的URL,例如ViewVC或Fisheye.
默认值为:父值[+路径调整] + artifactId

因此,所有这些元素的默认值包括路径调整和artifactId.

还有其他几个元素url.并非所有这些都是路径调整的,例如存储库的url不是.

让我们创建一个涵盖上述所有选项的示例.

对于此示例,我们需要一个maven-urls包含三个模块的project():

  • child-project - 一个不覆盖任何东西的常规子模块.
  • child-with-a-project-directory- 声明project.directory属性的子模块.
  • path-adjusted-child - 具有意外相对路径的子模块.

.目录结构应如下所示:

maven-urls
    child-project
    child-with-a-project-directory
    path
        path-adjusted-child
Run Code Online (Sandbox Code Playgroud)

父项目pom

在这里,我们将声明三个不同的URL和子项目(请注意路径path-adjusted-child):

...
<url>https://example.com</url>
<scm>
    <url>https://example.com/scm</url>
</scm>
<modules>
    <module>child-project</module>
    <module>path/path-adjusted-child</module>
    <module>child-with-a-project-directory</module>
</modules>
<distributionManagement>
    <site>
        <url>https://example.com/distribution</url>
    </site>
</distributionManagement>
...
Run Code Online (Sandbox Code Playgroud)

项目目录

对于child-with-a-project-directory我们将设置一个project.directory属性

...
<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <project.directory>project</project.directory>
</properties>
...
Run Code Online (Sandbox Code Playgroud)

路径调整项目

路径调整项目需要声明父模块的相对路径:

...
<parent>
    ...
    <relativePath>../../pom.xml</relativePath>
</parent>
...
Run Code Online (Sandbox Code Playgroud)

您可以在github上查看完整代码:https://github.com/defaultlocale/maven-urls.

结果

现在我们可以构建整个项目并检查值.我们可以使用maven帮助插件,它的effective-pom目标是为每个子项目找到有效的URL.

mvn help:effective-pom
Run Code Online (Sandbox Code Playgroud)

这是所有这些的输出:

child-project:

<url>https://example.com/child-project</url>
<scm>
    <url>https://example.com/scm/child-project</url>
</scm>
<distributionManagement>
    <site>
        <url>https://example.com/distribution/child-project</url>
    </site>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

这里没什么意外的.每个URL都只是一个artifactId附加的父URL .

child-with-a-project-directory:

...
<url>https://example.com/project</url>
<scm>
    <url>https://example.com/scm/project</url>
</scm>
<distributionManagement>
    <site>
        <url>https://example.com/distribution/project</url>
    </site>
</distributionManagement>
...
Run Code Online (Sandbox Code Playgroud)

事实证明,project.directory覆盖artifactId所有三个URL.这是意料之外的,未在文档中介绍.

path-adjusted-child:

<url>https://example.com/path/path-adjusted-child</url>
<scm>
    <url>https://example.com/scm/path/path-adjusted-child</url>
</scm>
<distributionManagement>
    <site>
        <url>https://example.com/distribution/path/path-adjusted-child</url>
    </site>
</distributionManagement>
...
Run Code Online (Sandbox Code Playgroud)

这里没有惊喜每个网址都包含相对路径和artifactId.