Some strange maven behaviour took up some of my time today.
A lot of our projects have some common settings, so we have a ‘parent pom’ artifact. I’ve been trying to tidy up our release procedure, and wanted to use the maven release plugin.
I thought I could be clever and define the scm settings in the parent pom like this:
<scm> <developerConnection>scm:git:https://our-repo-url/${repo.name}.git</developerConnection> </scm>
All projects using this parent would then just have to define a “repo.name” property in the pom.
However, it didn’t work! when running maven release, maven was attempting to push to ‘https://our-repo-url/${repo.name}.git/artifactId” i.e. it was appending the artifactId to the scm url. Needless to say, the push failed, and the maven release failed.
After some googling I found that same problem is encountered when trying to release a single module of a multi module project (For example see http://stackoverflow.com/questions/6727450/releasing-a-multi-module-maven-project-with-git)
I guess the maven release plugin is trying to be clever, and perhaps this behaviour makes more sense in an SVN world.
To fix the problem, I defined an “scm.root” variable in the parent pom, and defined the scm connection for individual projects as below:
<scm> <developerConnection>${scm.root}/reponame.git</developerConnection> </scm>