gpt4 book ai didi

maven - 子 pom 中的重复 artifactId

转载 作者:行者123 更新时间:2023-12-04 18:40:53 24 4
gpt4 key购买 nike

我想要一个父 pom 为众多子 pom 定义一些要继承的属性。但是,当我尝试在父 pom 的这些属性之一中使用 artifactId 时,它会在子 pom 的有效 pom 中重复。下面是非常基本的例子。假设我拥有 poms 所需的所有有效字段(groupId、version、packaging 等)。

父pom的有效pom的scm连接值为www.mysite.com/parent-pom .但是 child 的有效pom的scm连接值为www.mysite.com/child-pom/child-pom .我如何在没有重复的 artifactId 的情况下获得连接 url 的属性和一般结构的继承。我希望子 pom 具有 www.mysite.com/child-pom 的 scm 连接.

家长:

<project>
<artifactId>parent-pom</artifactId>
<properties>
<scmurl>www.mysite.com</scmurl>
</properties>
<scm>
<connection>${scmurl}/${artifactId}</connection>
</scm>
</project>

child :
<project>
<parent>
<artifactId>parent-pom</artifactId>
</parent>
<artifactId>child-pom</artifactId>
</project>

最佳答案

爱德华姆莱特,

您尝试执行的操作有两种解决方案,但它们都不是最佳解决方案。

基本问题

如果 Maven SCM 插件检测到 <scm>块已在您的父级中定义,但未在您的子级中定义,那么将推断您的子级的 SCM 路径只是父级的子目录。在您的情况下,您 parent 的网址本身包含一个额外的皱纹 ${project.artifactId}在再次添加 artifactId 之前,它会在子级别进行插值。

基本上,它正在执行以下操作:

project.scm.connection=${parent.scm.connection}/${project.artifactId}
project.scm.connection=${scmurl}/${project.artifactId}/${project.artifactId}
project.scm.connection=www.mysite.com/child-pom/child-pom

您 parent 的网址包含 ${artifactId} 的事实加剧了困惑,但即使您将 url 硬编码为 www.mysite.com/parent-pom/你将无法绕过 SCM 插件认为的事实 child-pom是父 url 的子目录,因此只需将其附加到路径的末尾。

您的 2 个选项是:

冗余而简单

将以下内容放入每个 child 的 pom.xml 文件中:
<scm>
<connection>${scmurl}/${artifactId}</connection>
</scm>

这很烦人,但相对简单。

高效但狡猾

让 parent-pom 包含以下内容:
<scm>
<connection>${scmurl}/</connection>
</scm>

这将导致每个 child 都有正确的 url,但 parent 本身会被搞砸。

您可以通过将父级的正确 url 放入配置文件来解决该问题:
<profile>
<id>parent-profile</id>
<scm>
<connection>${scmurl}/parent-pom</connection>
</scm>
</profile>


$ mvn -Pparent-profile ...

它不太明显并且容易出现手动错误,但它会避免编辑每个 child 的 pom 文件的需要。

希望有帮助。

关于maven - 子 pom 中的重复 artifactId,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26503589/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com