我有大量的项目在pom.xml中有相同的URL:
<url>https://github.com/malkusch/${project.artifactId}</url>
<scm>
<connection>scm:git:git://github.com/malkusch/${project.artifactId}.git</connection>
<developerConnection>scm:git:git@github.com:malkusch/${project.artifactId}.git</developerConnection>
<url>https://github.com/malkusch/${project.artifactId}</url>
</scm>
<issueManagement>
<system>github</system>
<url>https://github.com/malkusch/${project.artifactId}/issues</url>
</issueManagement>
所以我认为把它放到parent pom.xml中是一个好主意。但是有效的pom会产生奇怪的$ {project.artifactId}:
<parent>
<groupId>de.malkusch.parent</groupId>
<artifactId>oss-parent</artifactId>
<version>1.1-SNAPSHOT</version>
</parent>
<groupId>de.malkusch.localized</groupId>
<artifactId>localized</artifactId>
<url>https://github.com/malkusch/localized/localized</url>
<scm>
<connection>scm:git:git://github.com/malkusch/localized.git/localized</connection>
<developerConnection>scm:git:git@github.com:malkusch/localized.git/localized</developerConnection>
<url>https://github.com/malkusch/localized/localized</url>
</scm>
<issueManagement>
<system>github</system>
<url>https://github.com/malkusch/localized/issues</url>
</issueManagement>
您注意到只有issueManagement.url已正确解析。其他的都很奇怪,特别是 $ {project.artifactId} .git - &gt;的 localized.git /局部即可。我正在使用Maven 3.0.4。我使用了一些未定义的功能吗?这是一个错误吗?
答案 0 :(得分:9)
是的,这种行为令人困惑。
也许最简单的理解方法是考虑如何构建Maven本身。它在Subversion中,而反应堆poms(带有<modules>
部分的poms)往往也是模块本身的父poms。
project/pom.xml (artifactId: parent)
|-+ module1/pom.xml (artifactId: module1, inherits parent)
|-+ module2/pom.xml (artifactId: module2, inherits parent)
这里,父pom(project / pom.xml)包含<modules>
部分,并且还由module1和module2继承。
现在假设父级的SCM URL为svn://host/path/project/
:maven应该做什么,这样您就不必在两个模块中再次指定SCM URL?
嗯,module1的SCM URL是svn://host/path/project/module1
,Maven可以通过将artifactId添加到它从父pom继承的SCM URL来计算。它只需要将artifactId附加到SCM URL。这就是它的作用。
这就是你所看到的行为:
$ {project.artifactId} .git 变为 localized.git / localized ,如下所示:
localized -> from ${project.artifactId} in the inherited SCM URL
.git -> from the the inherited SCM URL
/localized -> from adding the artifactId to the inherited SCM URL
您会在SCM网址中看到此行为,我认为project.url
和distributionMangement.site.url
中的网址会显示此行为。但是,Maven并不认为issueManagement
URL结构遵循您的目录结构,这就是您看到它正确继承的原因。
答案 1 :(得分:0)
添加已经很好的背景信息,为了仍然使用有效的scm url
部署since Maven 3.5,您可以更正根据project.directory
属性附加的“模块”名称:
<properties>
<project.directory>${project.artifactId}</project.directory>
</properties>
然后,您只需将developerConnection
简化为不再包含artifactId
,因为它将作为project.directory
添加:
<scm>
<developerConnection>scm:git:git@server:</developerConnection>
</scm>
假设这与任何其他goals
没有冲突,那么应该允许deploy
目标使用正确的git url为非多模块Maven项目执行其工作在父pom中定义了scm.developerConnection
。
当我运行deploy
时,我看到maven做了正确的推送,如:
[INFO] Executing: /bin/sh -c cd /projectDir/proj && git push git@server:proj master:master
答案 2 :(得分:0)
从Maven 3.6.1开始,继承可以通过将每个url的模型属性值设置为false来避免将任何路径附加到父值。
''
似乎IntelliJ显示了错误,但是到最后,它确实完成了工作。