You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Nikola Ruzic <nr...@gmail.com> on 2019/01/30 14:22:21 UTC
maven site descriptor interpolation and inheritance on multi-module
project
Hi!
I'm having trouble to understand how maven site descriptor interpolation
is designed to work in multi-module sites using inheritance as described
here
(https://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html).
Here (https://maven.apache.org/plugins/maven-site-plugin/migrate.html)
it is stated that interpolation is now done after inheritance and new
early interpolation feature has been added to preserve backward
compatible behavior.
Here
(https://maven.apache.org/doxia/doxia-sitetools/doxia-integration-tools/index.html)
it is stated that interpolation can be late or early. I'm not sure if
this mean that late and early are mutually exclusive or not.
As far as I can discern from source code of DefaultSiteTool class in
doxia-site-tools-1.8.1
(https://github.com/apache/maven-doxia-sitetools/blob/947289e162a08c1002e304193c448f8d4b229285/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java#L473),
implementation intention is to first do early interpolation and then
"classical" late interpolation after inheritance is done.
I have written following master pom and site descriptor to test this
behavior
https://repo1.maven.org/maven2/com/github/nruzic/commons/master/nruzic-commons-master/3.0.0-RC14/
My site descriptor contains following section to test various
interpolation options:
<breadcrumbs>
<item name="Project Site" href="${this.foo}/${foo}/${FOO}/${project.name}"/>
</breadcrumbs>
Now, try to write following child pom and run "mvn site" command on it.
<?xml version="1.0" encoding="UTF-8"?>
<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>com.github.nruzic.commons.master</groupId>
<artifactId>nruzic-commons-master</artifactId>
<version>3.0.0-RC14</version>
<relativePath />
</parent>
<artifactId>site-descriptor-interpolation-test</artifactId>
<packaging>pom</packaging>
<name>Site Descriptor Interpolation Test</name>
<properties>
<foo>foo-from-child-project</foo>
</properties>
</project>
I'm getting following error:
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site) on
project site-descriptor-interpolation-test: Execution default-site of
goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site failed:
site.xml late interpolation ${project.*} expression found in link:
'foo-from-parent-using-this/${foo}/${FOO}/${project.name}'. Use early
interpolation ${this.*} -> [Help 1]
Maven version is:
mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3;
2018-10-24T20:41:47+02:00)
Maven home: /opt/maven
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime:
/usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.15.0-43-generic", arch: "amd64", family:
"unix"
I'm not sure why forbid "project." references in parent site descriptor?
Maybe one (like me) needs them to be be used with late interpolation.
If I remove "project." reference the problem only gets worse. Try
replace parent version in test pom with 3.0.0-RC13 version. Details
about RC13 version can be found here
https://repo1.maven.org/maven2/com/github/nruzic/commons/master/nruzic-commons-master/3.0.0-RC13/
Now I'm getting following error running "maven site" command:
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site) on
project site-descriptor-interpolation-test: Execution default-site of
goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site failed:
Illegal character in path at index 28:
foo-from-parent-using-this/${foo}/${FOO}/ -> [Help 1]
Now maven fails before late interpolation is done.
I have done following change in source code of doxia-decoration-model
(basically, skip rebase if link contains unresolved placeholders):
git diff
diff --git
a/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
b/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
index fd511ae..20bf1db 100644
---
a/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
+++
b/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
@@ -450,7 +450,7 @@ public class DefaultDecorationModelInheritanceAssembler
*/
public String rebaseLink( final String link )
{
- if ( link == null || getOldPath() == null )
+ if ( link == null || getOldPath() == null || link.contains(
"${" ) )
{
return link;
}
Now interpolation works as have have expected, all placeholders in
parent site descriptor are replaced.
Can someone comment given analysis please. Is this a bug in
doxia-sitetools or what?
Kind regards,
Nikola
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: maven site descriptor interpolation and inheritance on
multi-module project
Posted by Nikola Ruzic <nr...@gmail.com>.
One more thing,
in addition to given patch, one needs FOO environment variable set in
its environment for test to pass:
export FOO=foo-from-evnironment
/N
On 30. 01. 2019. 15:22, Nikola Ruzic wrote:
> Hi!
>
> I'm having trouble to understand how maven site descriptor
> interpolation is designed to work in multi-module sites using
> inheritance as described here
> (https://maven.apache.org/plugins/maven-site-plugin/examples/multimodule.html).
>
> Here (https://maven.apache.org/plugins/maven-site-plugin/migrate.html)
> it is stated that interpolation is now done after inheritance and new
> early interpolation feature has been added to preserve backward
> compatible behavior.
>
> Here
> (https://maven.apache.org/doxia/doxia-sitetools/doxia-integration-tools/index.html)
> it is stated that interpolation can be late or early. I'm not sure if
> this mean that late and early are mutually exclusive or not.
>
> As far as I can discern from source code of DefaultSiteTool class in
> doxia-site-tools-1.8.1
> (https://github.com/apache/maven-doxia-sitetools/blob/947289e162a08c1002e304193c448f8d4b229285/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java#L473),
> implementation intention is to first do early interpolation and then
> "classical" late interpolation after inheritance is done.
>
> I have written following master pom and site descriptor to test this
> behavior
> https://repo1.maven.org/maven2/com/github/nruzic/commons/master/nruzic-commons-master/3.0.0-RC14/
>
> My site descriptor contains following section to test various
> interpolation options:
>
> <breadcrumbs>
> <item name="Project Site"
> href="${this.foo}/${foo}/${FOO}/${project.name}"/>
> </breadcrumbs>
>
> Now, try to write following child pom and run "mvn site" command on it.
>
> <?xml version="1.0" encoding="UTF-8"?>
> <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>com.github.nruzic.commons.master</groupId>
> <artifactId>nruzic-commons-master</artifactId>
> <version>3.0.0-RC14</version>
> <relativePath />
> </parent>
>
> <artifactId>site-descriptor-interpolation-test</artifactId>
> <packaging>pom</packaging>
> <name>Site Descriptor Interpolation Test</name>
>
> <properties>
> <foo>foo-from-child-project</foo>
> </properties>
>
> </project>
>
> I'm getting following error:
>
> [ERROR] Failed to execute goal
> org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site)
> on project site-descriptor-interpolation-test: Execution default-site
> of goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site failed:
> site.xml late interpolation ${project.*} expression found in link:
> 'foo-from-parent-using-this/${foo}/${FOO}/${project.name}'. Use early
> interpolation ${this.*} -> [Help 1]
>
> Maven version is:
>
> mvn -v
> Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3;
> 2018-10-24T20:41:47+02:00)
> Maven home: /opt/maven
> Java version: 1.8.0_191, vendor: Oracle Corporation, runtime:
> /usr/lib/jvm/java-8-oracle/jre
> Default locale: en_US, platform encoding: UTF-8
> OS name: "linux", version: "4.15.0-43-generic", arch: "amd64", family:
> "unix"
>
> I'm not sure why forbid "project." references in parent site
> descriptor? Maybe one (like me) needs them to be be used with late
> interpolation.
>
> If I remove "project." reference the problem only gets worse. Try
> replace parent version in test pom with 3.0.0-RC13 version. Details
> about RC13 version can be found here
> https://repo1.maven.org/maven2/com/github/nruzic/commons/master/nruzic-commons-master/3.0.0-RC13/
>
> Now I'm getting following error running "maven site" command:
>
> [ERROR] Failed to execute goal
> org.apache.maven.plugins:maven-site-plugin:3.7.1:site (default-site)
> on project site-descriptor-interpolation-test: Execution default-site
> of goal org.apache.maven.plugins:maven-site-plugin:3.7.1:site failed:
> Illegal character in path at index 28:
> foo-from-parent-using-this/${foo}/${FOO}/ -> [Help 1]
>
> Now maven fails before late interpolation is done.
>
> I have done following change in source code of doxia-decoration-model
> (basically, skip rebase if link contains unresolved placeholders):
>
> git diff
> diff --git
> a/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
> b/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
>
> index fd511ae..20bf1db 100644
> ---
> a/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
> +++
> b/doxia-decoration-model/src/main/java/org/apache/maven/doxia/site/decoration/inheritance/DefaultDecorationModelInheritanceAssembler.java
> @@ -450,7 +450,7 @@ public class
> DefaultDecorationModelInheritanceAssembler
> */
> public String rebaseLink( final String link )
> {
> - if ( link == null || getOldPath() == null )
> + if ( link == null || getOldPath() == null ||
> link.contains( "${" ) )
> {
> return link;
> }
>
> Now interpolation works as have have expected, all placeholders in
> parent site descriptor are replaced.
>
> Can someone comment given analysis please. Is this a bug in
> doxia-sitetools or what?
>
> Kind regards,
>
> Nikola
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org