I wish to define the distributionManagement values for all my projects in a common parent pom.
parent pom.xml
<url>${site.url}</url>
<properties>
<site.base.url>file:///Users/macuser/Sites</site.base.url>
<site.url>${site.base.url}/${project.artifactId}</site.url>
</properties>
<distributionManagement>
<site>
<id>local</id>
<url>${site.url}</url>
</site>
</distributionManagement>
The effective pom for this is as expected:
<url>file:///Users/macuser/Sites/parent-pom</url>
<distributionManagement>
<site>
<id>local</id>
<url>file:///Users/macuser/Sites/parent-pom</url>
</site>
</distributionManagement>
<properties>
<site.base.url>file:///Users/macuser/Sites</site.base.url>
<site.url>file:///Users/macuser/Sites/parent-pom</site.url>
</properties>
In child pom, I specify the parent pom only, no other elements. I expect the distributionManagement
to inherit from the parent.
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>mlgiroux</groupId>
<artifactId>parent-pom</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath></relativePath>
</parent>
<artifactId>parent-pom-test</artifactId>
<packaging>pom</packaging>
</project>
The effective pom is strange:
<url>file:///Users/macuser/Sites/parent-pom-test/parent-pom-test</url>
<distributionManagement>
<site>
<id>local</id>
<url>file:///Users/macuser/Sites/parent-pom-test/parent-pom-test</url>
</site>
</distributionManagement>
<properties>
<site.base.url>file:///Users/macuser/Sites</site.base.url>
<site.url>file:///Users/macuser/Sites/parent-pom-test</site.url>
</properties>
The site.url property has been resolved as I expected, but the <url> elements for project.url
and distributionManagement.site.url that were defined in the parent as ${site.url} have the
artifactId twice. As if I had specified ${site.base.url}/${project.artifactId}/${project.artifactId}
Now, if I add the url and distributionManagement to the child pom as:
<url>${site.url}</url>
<distributionManagement>
<site>
<id>local</id>
<url>${site.url}</url>
</site>
</distributionManagement>
The effective pom is exactly as I expect with the artifactId specified exactly once in the
effective values.
<url>file:///Users/macuser/Sites/parent-pom-test</url>
<distributionManagement>
<site>
<id>local</id>
<url>file:///Users/macuser/Sites/parent-pom-test</url>
</site>
</distributionManagement>
I think it is important to point out that the child is NOT a sub module of the parent. It
specifies a parent, but it is itself a root module.
This feels like a defect to me.
Michael Giroux
|