我在某处读到如果Maven项目使用继承,那么它的子项目将使用子项目自动向URL添加子路径artifactId.但现在我找不到参考.
哪个继承的URL将Maven从父POM逐字继承,并且它将为子POM添加子路径?例如,以下是我可以找到的一些网址:
<project><url><project><scm><url><project><distributionManagement><site><url>也许我错了,他们都没有添加一个子路径,但我在笔记中有它.不幸的是,我似乎找不到使用互联网搜索的确定答案.
请尝试在答案中提供权威参考.(当然,如果没有相关的文档,直接测试将是第二好的.)在此先感谢.
所有这些元素都在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.
| 归档时间: |
|
| 查看次数: |
203 次 |
| 最近记录: |