${project.artifactId} in parent pom.xml resolves odd

匿名 (未验证) 提交于 2019-12-03 03:10:03

问题:

I have a bulk full of projects which have the same URLs in their pom.xml:

<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> 

So I thought it's a great idea to put that into a parent pom.xml. But the effective pom produces odd ${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> 

You notice that only issueManagement.url was resolved correctly. The others are totally strange, especially ${project.artifactId}.git -> localized.git/localized. I'm using Maven 3.0.4. Am I using some undefined feature? Is it a bug?

回答1:

Yes, this behaviour is confusing.

Perhaps the easiest way to understand this is to consider how Maven itself is built. It's in Subversion, and the reactor poms (the poms with <modules> sections) tend to also be the parent poms of the modules themselves.

project/pom.xml (artifactId: parent) |-+ module1/pom.xml (artifactId: module1, inherits parent) |-+ module2/pom.xml (artifactId: module2, inherits parent) 

Here, the parent pom (project/pom.xml) contains a <modules> section, and is also inherited by module1 and module2.

Now suppose the SCM URL for parent is svn://host/path/project/: what should maven do so that you don't have to specify the SCM URL again in the two modules?

Well, the SCM URL for module1 is svn://host/path/project/module1, and Maven can compute that by adding the artifactId to the SCM URL it inherits from the parent pom. It simply needs to append the artifactId to the SCM URL. So that's exactly what it does.

So that's the behaviour you're seeing:

${project.artifactId}.git becomes localized.git/localized as follows:

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 

You will see this behaviour in the SCM URLs, and (I think) for project.url and the URL in distributionMangement.site.url. However, Maven doesn't assume that the issueManagement URL structure follows your directory structure, which is why you see it inherited correctly.



回答2:

Adding to the already great background information given, in order to still deploy with a valid scm url, since Maven 3.5 you can correct the "module" name that gets appended per the project.directory property:

<properties>     <project.directory>${project.artifactId}</project.directory> </properties> 

And then you just simplify your developerConnection to not include the artifactId anymore since it will be appended as the project.directory:

<scm>     <developerConnection>scm:git:git@server:</developerConnection> </scm> 

Assuming this doesn't conflict with any other goals, that should allow a deploy goal to do its job with the correct git url for a non-multi-module Maven project where you've defined the scm.developerConnection in the parent pom.

When I run a deploy, I see maven doing a correct push like:

[INFO] Executing: /bin/sh -c cd /projectDir/proj && git push git@server:proj master:master 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!