You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by kw...@apache.org on 2026/03/26 14:34:09 UTC
(maven-doxia-sitetools) branch bugfix/property-interpolation created (now cd6157a)
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a change to branch bugfix/property-interpolation
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git
at cd6157a Interpolate using user and system properties in Site Descriptor
This branch includes the following new commits:
new cd6157a Interpolate using user and system properties in Site Descriptor
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
(maven-doxia-sitetools) 01/01: Interpolate using user and system properties in Site Descriptor
Posted by kw...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
kwin pushed a commit to branch bugfix/property-interpolation
in repository https://gitbox.apache.org/repos/asf/maven-doxia-sitetools.git
commit cd6157a0ecb3f2464b82103439a608f2c90f9f6d
Author: Konrad Windszus <kw...@apache.org>
AuthorDate: Thu Mar 26 15:33:59 2026 +0100
Interpolate using user and system properties in Site Descriptor
This closes #629
---
.../apache/maven/doxia/tools/DefaultSiteTool.java | 55 ++++++++++++++++++----
.../org/apache/maven/doxia/tools/SiteTool.java | 31 ++++++++++++
2 files changed, 77 insertions(+), 9 deletions(-)
diff --git a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
index dfccf7e..4ec8318 100644
--- a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
+++ b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/DefaultSiteTool.java
@@ -38,6 +38,7 @@ import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
+import java.util.Properties;
import java.util.StringTokenizer;
import org.apache.commons.io.FilenameUtils;
@@ -64,6 +65,7 @@ import org.apache.maven.doxia.site.decoration.io.xpp3.DecorationXpp3Reader;
import org.apache.maven.doxia.site.inheritance.SiteModelInheritanceAssembler;
import org.apache.maven.doxia.site.io.xpp3.SiteXpp3Reader;
import org.apache.maven.doxia.site.io.xpp3.SiteXpp3Writer;
+import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.model.DistributionManagement;
import org.apache.maven.model.Plugin;
import org.apache.maven.project.MavenProject;
@@ -374,10 +376,24 @@ public class DefaultSiteTool implements SiteTool {
}
}
- /** {@inheritDoc} */
+ @Override
+ public SiteModel getSiteModel(
+ File siteDirectory,
+ Locale locale,
+ MavenProject project,
+ List<MavenProject> reactorProjects,
+ RepositorySystemSession repoSession,
+ List<RemoteRepository> remoteProjectRepositories)
+ throws SiteToolException {
+ return getSiteModel(
+ siteDirectory, locale, null, project, reactorProjects, repoSession, remoteProjectRepositories);
+ }
+
+ @Override
public SiteModel getSiteModel(
File siteDirectory,
Locale locale,
+ MavenExecutionRequest request,
MavenProject project,
List<MavenProject> reactorProjects,
RepositorySystemSession repoSession,
@@ -393,7 +409,7 @@ public class DefaultSiteTool implements SiteTool {
+ (locale.equals(SiteTool.DEFAULT_LOCALE) ? "default locale" : "locale '" + locale + "'"));
Map.Entry<SiteModel, MavenProject> result =
- getSiteModel(0, siteDirectory, locale, project, repoSession, remoteProjectRepositories);
+ getSiteModel(0, siteDirectory, locale, request, project, repoSession, remoteProjectRepositories);
SiteModel siteModel = result.getKey();
MavenProject parentProject = result.getValue();
@@ -406,7 +422,7 @@ public class DefaultSiteTool implements SiteTool {
String siteDescriptorContent = siteModelToString(siteModel);
// "classical" late interpolation, after full inheritance
- siteDescriptorContent = getInterpolatedSiteDescriptorContent(project, siteDescriptorContent, false);
+ siteDescriptorContent = getInterpolatedSiteDescriptorContent(request, project, siteDescriptorContent, false);
siteModel = readSiteModel(siteDescriptorContent, project, locale);
@@ -429,11 +445,12 @@ public class DefaultSiteTool implements SiteTool {
Objects.requireNonNull(props, "props cannot be null");
// "classical" late interpolation
- return getInterpolatedSiteDescriptorContent(aProject, siteDescriptorContent, false);
+ return getInterpolatedSiteDescriptorContent(null, aProject, siteDescriptorContent, false);
}
private String getInterpolatedSiteDescriptorContent(
- MavenProject aProject, String siteDescriptorContent, boolean isEarly) throws SiteToolException {
+ MavenExecutionRequest request, MavenProject aProject, String siteDescriptorContent, boolean isEarly)
+ throws SiteToolException {
Objects.requireNonNull(aProject, "aProject cannot be null");
Objects.requireNonNull(siteDescriptorContent, "siteDescriptorContent cannot be null");
@@ -441,10 +458,11 @@ public class DefaultSiteTool implements SiteTool {
if (isEarly) {
interpolator.addValueSource(new PrefixedObjectValueSource("this.", aProject));
- interpolator.addValueSource(new PrefixedPropertiesValueSource("this.", aProject.getProperties()));
+ interpolator.addValueSource(new PrefixedPropertiesValueSource("this.", mergeProperties(request, aProject)));
+
} else {
interpolator.addValueSource(new PrefixedObjectValueSource("project.", aProject));
- interpolator.addValueSource(new MapBasedValueSource(aProject.getProperties()));
+ interpolator.addValueSource(new MapBasedValueSource(mergeProperties(request, aProject)));
try {
interpolator.addValueSource(new EnvarBasedValueSource());
@@ -477,6 +495,17 @@ public class DefaultSiteTool implements SiteTool {
}
}
+ private static Properties mergeProperties(MavenExecutionRequest request, MavenProject aProject) {
+ Properties merged = new Properties();
+ if (request != null) {
+ merged.putAll(request.getSystemProperties());
+ }
+ merged.putAll(aProject.getProperties());
+ if (request != null) {
+ merged.putAll(request.getUserProperties());
+ }
+ return merged;
+ }
/**
* Populate the pre-defined <code>parent</code> menu of the site model,
* if used through <code><menu ref="parent"/></code>.
@@ -968,6 +997,7 @@ public class DefaultSiteTool implements SiteTool {
int depth,
File siteDirectory,
Locale locale,
+ MavenExecutionRequest request,
MavenProject project,
RepositorySystemSession repoSession,
List<RemoteRepository> remoteProjectRepositories)
@@ -1000,7 +1030,8 @@ public class DefaultSiteTool implements SiteTool {
String siteDescriptorContent = IOUtil.toString(siteDescriptorReader);
// interpolate ${this.*} = early interpolation
- siteDescriptorContent = getInterpolatedSiteDescriptorContent(project, siteDescriptorContent, true);
+ siteDescriptorContent =
+ getInterpolatedSiteDescriptorContent(request, project, siteDescriptorContent, true);
siteModel = readSiteModel(siteDescriptorContent, project, locale);
siteModel.setLastModified(siteDescriptor.lastModified());
@@ -1035,7 +1066,13 @@ public class DefaultSiteTool implements SiteTool {
}
SiteModel parentSiteModel = getSiteModel(
- depth, parentSiteDirectory, locale, parentProject, repoSession, remoteProjectRepositories)
+ depth,
+ parentSiteDirectory,
+ locale,
+ request,
+ parentProject,
+ repoSession,
+ remoteProjectRepositories)
.getKey();
if (siteModel != null) {
diff --git a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/SiteTool.java b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/SiteTool.java
index 27d769b..502fcc2 100644
--- a/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/SiteTool.java
+++ b/doxia-integration-tools/src/main/java/org/apache/maven/doxia/tools/SiteTool.java
@@ -26,6 +26,7 @@ import java.util.Map;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.doxia.site.SiteModel;
import org.apache.maven.doxia.site.Skin;
+import org.apache.maven.execution.MavenExecutionRequest;
import org.apache.maven.project.MavenProject;
import org.apache.maven.reporting.MavenReport;
import org.eclipse.aether.RepositorySystemSession;
@@ -100,7 +101,9 @@ public interface SiteTool {
* @param siteDescriptorContent the site descriptor file, not null.
* @return the interpolated site descriptor content.
* @throws SiteToolException if errors happened during the interpolation.
+ * @deprecated since 2.1.0, use {@link #getSiteModel(File, Locale, MavenExecutionRequest, MavenProject, List, RepositorySystemSession, List)} instead
*/
+ @Deprecated
// used by maven-pdf-plugin (should not?)
String getInterpolatedSiteDescriptorContent(
Map<String, String> props, MavenProject aProject, String siteDescriptorContent) throws SiteToolException;
@@ -119,7 +122,9 @@ public interface SiteTool {
* interpolations.
* @throws SiteToolException if any
* @since 1.7, was previously with other parameter types and order
+ * @deprecated since 2.1.0, use {@link #getSiteModel(File, Locale, MavenExecutionRequest, MavenProject, List, RepositorySystemSession, List)} instead
*/
+ @Deprecated
SiteModel getSiteModel(
File siteDirectory,
Locale locale,
@@ -129,6 +134,32 @@ public interface SiteTool {
List<RemoteRepository> remoteProjectRepositories)
throws SiteToolException;
+ /**
+ * Get a site model for a project.
+ *
+ * @param siteDirectory the site directory, may be null if project from repository
+ * @param locale the locale used for the i18n in SiteModel, not null.
+ * See {@link #getSiteDescriptor(File, Locale)} for details.
+ * @param project the Maven project, not null.
+ * @param request the Maven execution request (may be null). This is needed to get the user properties and the system properties for interpolation.
+ * @param reactorProjects the Maven reactor projects, not null.
+ * @param repoSession the repository system session, not null.
+ * @param remoteProjectRepositories the Maven remote project repositories, not null.
+ * @return the <code>SiteModel</code> object corresponding to the <code>site.xml</code> file with some
+ * interpolations.
+ * @throws SiteToolException if any
+ * @since 2.1.0, was previously with other parameter types and order
+ */
+ SiteModel getSiteModel(
+ File siteDirectory,
+ Locale locale,
+ MavenExecutionRequest request,
+ MavenProject project,
+ List<MavenProject> reactorProjects,
+ RepositorySystemSession repoSession,
+ List<RemoteRepository> remoteProjectRepositories)
+ throws SiteToolException;
+
/**
* Populate the pre-defined <code>reports</code> menu of the site model,
* if used through <code><menu ref="reports"/></code>. Notice this menu reference is translated into