edw*_*yte 5 pom.xml maven parent-pom
我希望父pom为许多子pom定义一些属性来继承.但是,当我尝试在父pom中的其中一个属性中使用artifactId时,它会复制孩子的有效pom.以下非常基本的例子.假设我拥有poms所需的所有有效字段(groupId,版本,包装等).
父pom的有效pom的scm连接值为www.mysite.com/parent-pom.但孩子的有效pom有一个scm连接值www.mysite.com/child-pom/child-pom.如何在没有重复artifactId的情况下获得连接URL的属性和一般结构的继承.我希望孩子pom有一个scm连接www.mysite.com/child-pom.
家长:
<project>
<artifactId>parent-pom</artifactId>
<properties>
<scmurl>www.mysite.com</scmurl>
</properties>
<scm>
<connection>${scmurl}/${artifactId}</connection>
</scm>
</project>
Run Code Online (Sandbox Code Playgroud)
儿童:
<project>
<parent>
<artifactId>parent-pom</artifactId>
</parent>
<artifactId>child-pom</artifactId>
</project>
Run Code Online (Sandbox Code Playgroud)
爱德华·莱姆
您有2种解决方案,但是都不是最佳选择。
基本问题
如果Maven的SCM插件检测该<scm>块已经在你的父母被定义,但不是你的孩子,那么它会有理由相信您的孩子的SCM路径简直是父的子目录。在您的情况下,您的父母的url本身还包含一个额外的皱纹,该皱纹${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
Run Code Online (Sandbox Code Playgroud)
父母的URL包含事实的事实${artifactId}加剧了混淆,但是即使您对URL进行了硬编码,www.mysite.com/parent-pom/您也无法避免SCM插件认为它child-pom是父母的URL的子目录,因此只需将其附加到末尾即可。的路径。
您的2个选项是:
冗余但简单
将以下内容放入每个孩子的pom.xml文件中:
<scm>
<connection>${scmurl}/${artifactId}</connection>
</scm>
Run Code Online (Sandbox Code Playgroud)
这很烦人,但相对简单。
高效但狡猾
让parent-pom包含以下内容:
<scm>
<connection>${scmurl}/</connection>
</scm>
Run Code Online (Sandbox Code Playgroud)
这将导致每个孩子都有正确的url,但是父母本身会被弄乱。
您可以通过将父母的正确网址放入配置文件中来解决该问题:
<profile>
<id>parent-profile</id>
<scm>
<connection>${scmurl}/parent-pom</connection>
</scm>
</profile>
$ mvn -Pparent-profile ...
Run Code Online (Sandbox Code Playgroud)
它不太明显,容易出现人为错误,但可以避免编辑每个孩子的pom文件的麻烦。
希望能有所帮助。
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |