From 5488257469544228e8476b4ef8757faa8ab94b5c Mon Sep 17 00:00:00 2001 From: Michael Osipov Date: Thu, 14 Dec 2023 12:12:19 +0100 Subject: [PATCH 1/2] [MSITE-997] Non-localized site directory DocumentRenderingContext passed --- .../render/AbstractSiteRenderingMojo.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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 90f60165..630515ff 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 @@ -367,11 +367,17 @@ protected Map locateReports( getLog().info("Skipped \"" + report.getName(locale) + "\" report" + reportMojoInfo + ", file \"" + filename + "\" already exists."); } else { + File localizedSiteDirectory; + if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { + localizedSiteDirectory = new File(siteDirectory, locale.toString()); + } else { + localizedSiteDirectory = siteDirectory; + } String generator = mavenReportExecution.getGoal() == null ? null : mavenReportExecution.getPlugin().getId() + ':' + mavenReportExecution.getGoal(); DocumentRenderingContext docRenderingContext = - new DocumentRenderingContext(siteDirectory, outputName, generator); + new DocumentRenderingContext(localizedSiteDirectory, outputName, generator); DocumentRenderer docRenderer = new ReportDocumentRenderer(mavenReportExecution, docRenderingContext, getLog()); documents.put(filename, docRenderer); @@ -428,13 +434,20 @@ protected Map locateDocuments( siteTool.populateReportsMenu(context.getSiteModel(), locale, categories); populateReportItems(context.getSiteModel(), locale, reportsByOutputName); + File localizedSiteDirectory; + if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { + localizedSiteDirectory = new File(siteDirectory, locale.toString()); + } else { + localizedSiteDirectory = siteDirectory; + } + if (categories.containsKey(MavenReport.CATEGORY_PROJECT_INFORMATION) && generateProjectInfo) { // add "Project Information" category summary document List categoryReports = categories.get(MavenReport.CATEGORY_PROJECT_INFORMATION); MojoExecution subMojoExecution = new MojoExecution(mojoExecution.getPlugin(), "project-info", mojoExecution.getExecutionId()); DocumentRenderingContext docRenderingContext = new DocumentRenderingContext( - siteDirectory, + localizedSiteDirectory, subMojoExecution.getGoal(), subMojoExecution.getPlugin().getId() + ':' + subMojoExecution.getGoal()); String title = i18n.getString("site-plugin", locale, "report.information.title"); @@ -457,7 +470,7 @@ protected Map locateDocuments( MojoExecution subMojoExecution = new MojoExecution(mojoExecution.getPlugin(), "project-reports", mojoExecution.getExecutionId()); DocumentRenderingContext docRenderingContext = new DocumentRenderingContext( - siteDirectory, + localizedSiteDirectory, subMojoExecution.getGoal(), subMojoExecution.getPlugin().getId() + ':' + subMojoExecution.getGoal()); String title = i18n.getString("site-plugin", locale, "report.project.title"); @@ -478,7 +491,7 @@ protected Map locateDocuments( MojoExecution subMojoExecution = new MojoExecution(mojoExecution.getPlugin(), "sitemap", mojoExecution.getExecutionId()); DocumentRenderingContext docRenderingContext = new DocumentRenderingContext( - siteDirectory, + localizedSiteDirectory, subMojoExecution.getGoal(), subMojoExecution.getPlugin().getId() + ':' + subMojoExecution.getGoal()); String title = i18n.getString("site-plugin", locale, "site.sitemap.title"); From a3fe0020577c7ce3bdcec869d858c6d1d4547ce1 Mon Sep 17 00:00:00 2001 From: Michael Osipov Date: Wed, 13 Dec 2023 21:46:24 +0100 Subject: [PATCH 2/2] [MSITE-998] MavenReport#setReportOutputDirectory(File) is called too late --- src/it/projects/site-sd-lang/pom.xml | 37 +++++++++++++++++++ .../render/AbstractSiteRenderingMojo.java | 3 +- .../maven/plugins/site/render/SiteMojo.java | 32 ++++++---------- .../maven/plugins/site/run/SiteRunMojo.java | 25 ++++++++++--- 4 files changed, 70 insertions(+), 27 deletions(-) diff --git a/src/it/projects/site-sd-lang/pom.xml b/src/it/projects/site-sd-lang/pom.xml index 26441c98..fa7a1b2d 100644 --- a/src/it/projects/site-sd-lang/pom.xml +++ b/src/it/projects/site-sd-lang/pom.xml @@ -71,6 +71,43 @@ under the License. + + maven-pmd-plugin + @pmdPluginVersion@ + + + + pmd + cpd + + + + + true + + + + maven-jxr-plugin + @jxrPluginVersion@ + + + + jxr-no-fork + + + + + + maven-javadoc-plugin + @javadocPluginVersion@ + + + + javadoc-no-fork + + + + 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 630515ff..8906cbc8 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 @@ -213,7 +213,7 @@ protected void checkInputEncoding() { } } - protected List getReports() throws MojoExecutionException { + protected List getReports(File outputDirectory) throws MojoExecutionException { MavenReportExecutorRequest mavenReportExecutorRequest = new MavenReportExecutorRequest(); mavenReportExecutorRequest.setMavenSession(mavenSession); mavenReportExecutorRequest.setExecutionId(mojoExecution.getExecutionId()); @@ -226,6 +226,7 @@ protected List getReports() throws MojoExecutionException List reportExecutions = new ArrayList<>(allReports.size()); for (MavenReportExecution exec : allReports) { String reportMojoInfo = exec.getPlugin().getId() + ":" + exec.getGoal(); + exec.getMavenReport().setReportOutputDirectory(outputDirectory); try { if (exec.canGenerateReport()) { reportExecutions.add(exec); diff --git a/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java b/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java index 84d24e5f..7b261ac7 100644 --- a/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/render/SiteMojo.java @@ -39,7 +39,6 @@ import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; -import org.apache.maven.reporting.MavenReport; import org.apache.maven.reporting.MavenReportException; import org.apache.maven.reporting.exec.MavenReportExecution; import org.apache.maven.shared.utils.logging.MessageBuilder; @@ -95,13 +94,6 @@ public void execute() throws MojoExecutionException, MojoFailureException { checkInputEncoding(); - List reports; - if (generateReports) { - reports = getReports(); - } else { - reports = Collections.emptyList(); - } - try { List localesList = getLocales(); @@ -112,7 +104,10 @@ public void execute() throws MojoExecutionException, MojoFailureException { ? "locale '" + locale + "'" : "default locale")) .toString()); - renderLocale(locale, reports, localesList); + File outputDirectory = getOutputDirectory(locale); + List reports = + generateReports ? getReports(outputDirectory) : Collections.emptyList(); + renderLocale(locale, reports, localesList, outputDirectory); } } catch (RendererException e) { if (e.getCause() instanceof MavenReportException) { @@ -125,7 +120,8 @@ public void execute() throws MojoExecutionException, MojoFailureException { } } - private void renderLocale(Locale locale, List reports, List supportedLocales) + private void renderLocale( + Locale locale, List reports, List supportedLocales, File outputDirectory) throws IOException, RendererException, MojoFailureException, MojoExecutionException { SiteRenderingContext context = createSiteRenderingContext(locale); context.addSiteLocales(supportedLocales); @@ -142,8 +138,6 @@ private void renderLocale(Locale locale, List reports, Lis getLog().info("Validation is switched on, xml input documents will be validated!"); } - File outputDirectory = getOutputDirectory(locale); - Map documents = locateDocuments(context, reports, locale); // copy resources @@ -152,12 +146,6 @@ private void renderLocale(Locale locale, List reports, Lis // 1. render Doxia documents first List nonDoxiaDocuments = renderDoxiaDocuments(documents, context, outputDirectory, false); - // prepare external reports - for (MavenReportExecution mavenReportExecution : reports) { - MavenReport report = mavenReportExecution.getMavenReport(); - report.setReportOutputDirectory(outputDirectory); - } - // 2. then non-Doxia documents (e.g., reports) renderNonDoxiaDocuments(nonDoxiaDocuments, context, outputDirectory); @@ -185,7 +173,10 @@ private void renderLocale(Locale locale, List reports, Lis * @return the sublist of documents that are not Doxia source files */ private List renderDoxiaDocuments( - Map documents, SiteRenderingContext context, File outputDirectory, boolean generated) + Map documents, + SiteRenderingContext context, + File outputDirectory, + boolean generated) throws RendererException, IOException { Map doxiaDocuments = new TreeMap<>(); List nonDoxiaDocuments = new ArrayList<>(); @@ -244,7 +235,8 @@ private List renderDoxiaDocuments( * * @param documents a collection of documents containing non-Doxia source files */ - private void renderNonDoxiaDocuments(List documents, SiteRenderingContext context, File outputDirectory) + private void renderNonDoxiaDocuments( + List documents, SiteRenderingContext context, File outputDirectory) throws RendererException, IOException { Map counts = new TreeMap<>(); diff --git a/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java b/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java index 5d7381a6..f5430e00 100644 --- a/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java +++ b/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java @@ -121,12 +121,6 @@ private WebAppContext createWebApplication() throws MojoExecutionException { // For external reports project.getReporting().setOutputDirectory(tempWebappDirectory.getAbsolutePath()); - for (MavenReportExecution mavenReportExecution : getReports()) { - mavenReportExecution.getMavenReport().setReportOutputDirectory(tempWebappDirectory); - } - - List reports = - getReports(); // TODO: is it sane to call getReports() method a second time? List localesList = getLocales(); webapp.setAttribute(DoxiaFilter.LOCALES_LIST_KEY, localesList); @@ -144,6 +138,9 @@ private WebAppContext createWebApplication() throws MojoExecutionException { i18nGeneratedSiteContext.setOutputEncoding(getOutputEncoding()); i18nGeneratedSiteContext.getSiteDirectories().clear(); + File outputDirectory = getOutputDirectory(locale); + List reports = getReports(outputDirectory); + Map i18nDocuments = locateDocuments(i18nContext, reports, locale); if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { i18nGeneratedSiteContext.addSiteDirectory(new File(generatedSiteDirectory, locale.toString())); @@ -172,6 +169,22 @@ private WebAppContext createWebApplication() throws MojoExecutionException { return webapp; } + private File getOutputDirectory(Locale locale) { + File file; + if (!locale.equals(SiteTool.DEFAULT_LOCALE)) { + file = new File(tempWebappDirectory, locale.toString()); + } else { + file = tempWebappDirectory; + } + + // Safety + if (!file.exists()) { + file.mkdirs(); + } + + return file; + } + public void setTempWebappDirectory(File tempWebappDirectory) { this.tempWebappDirectory = tempWebappDirectory; }