From 103ecd45537f23b1b15aa2c366c7ce44e4b34d80 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Wed, 11 Mar 2026 15:16:43 +0100 Subject: [PATCH] Allow to give alternative source directories for sites --- pom.xml | 6 ++-- .../render/AbstractSiteRenderingMojo.java | 28 +++++++++++++++---- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index 3b1e38f6..7ced54d2 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ under the License. maven-site-plugin - 4.0.0-M17-SNAPSHOT + 3.22.0-SNAPSHOT maven-plugin Apache Maven Site Plugin @@ -198,8 +198,8 @@ under the License. 3.6.3 9.4.57.v20241219 - 2.0.0 - 2.0.0 + 2.1.0-SNAPSHOT + 2.1.0-SNAPSHOT 3.5.3 1.7.36 diff --git a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java index 72270446..5c248b07 100644 --- a/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/render/AbstractSiteRenderingMojo.java @@ -100,13 +100,22 @@ public abstract class AbstractSiteRenderingMojo extends AbstractSiteDescriptorMo * build time mean). * This directory is expected to have the same structure as siteDirectory * (ie. one directory per Doxia-source-supported markup types). - * - * todo should we deprecate in favour of reports directly using Doxia Sink API, without this Doxia source - * intermediate step? + * This is never editable. */ @Parameter(alias = "workingDirectory", defaultValue = "${project.build.directory}/generated-site") protected File generatedSiteDirectory; + /** + * Optional list of source directories to be used instead of {@link #siteDirectory} for rendering edit URLs. + * This is only used for documents rendered from {@link #siteDirectory} but not for those rendered from {@link AbstractSiteRenderingMojo#generatedSiteDirectory}. + * as the latter ones are always considered non-editable. + * + * The first directory containing a document with the given relative path is used for generating the URL (the same relative path as the document has to {@link #siteDirectory}). + * @since 3.22.0 + */ + @Parameter + protected File[] alternativeSiteSourceDirectories; + /** * The current Maven session. */ @@ -320,14 +329,21 @@ protected SiteRenderingContext createSiteRenderingContext(Locale locale) // Generate static site context.setRootDirectory(project.getBasedir()); + final SiteDirectory mainSiteDirectory; if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { - context.addSiteDirectory(new SiteDirectory(new File(siteDirectory, locale.toString()), true)); + mainSiteDirectory = new SiteDirectory(new File(this.siteDirectory, locale.toString()), true); context.addSiteDirectory(new SiteDirectory(new File(generatedSiteDirectory, locale.toString()), false)); } else { - context.addSiteDirectory(new SiteDirectory(siteDirectory, true)); + mainSiteDirectory = new SiteDirectory(siteDirectory, true); context.addSiteDirectory(new SiteDirectory(generatedSiteDirectory, false)); } - + if (alternativeSiteSourceDirectories != null) { + for (File additionalSiteSourceDirectory : alternativeSiteSourceDirectories) { + mainSiteDirectory.addAlternativeSourceDirectory(additionalSiteSourceDirectory); + } + } + context.addSiteDirectory(mainSiteDirectory); + if (moduleExcludes != null) { context.setModuleExcludes(moduleExcludes); }