Author: hboutemy Date: Sun Dec 20 00:38:35 2015 New Revision: 1720982 URL: http://svn.apache.org/viewvc?rev=1720982&view=rev Log: [MSITE-754] fixed ConcurrentModificationException when using site:run by using separate stable contexts for src/site and target/generated-site
Modified: maven/plugins/trunk/maven-site-plugin/pom.xml maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java Modified: maven/plugins/trunk/maven-site-plugin/pom.xml URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/pom.xml?rev=1720982&r1=1720981&r2=1720982&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/pom.xml (original) +++ maven/plugins/trunk/maven-site-plugin/pom.xml Sun Dec 20 00:38:35 2015 @@ -30,7 +30,7 @@ under the License. </parent> <artifactId>maven-site-plugin</artifactId> - <version>3.4.1-SNAPSHOT</version> + <version>3.5-SNAPSHOT</version> <packaging>maven-plugin</packaging> <name>Apache Maven Site Plugin</name> Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java?rev=1720982&r1=1720981&r2=1720982&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaBean.java Sun Dec 20 00:38:35 2015 @@ -19,7 +19,6 @@ package org.apache.maven.plugins.site.ru * under the License. */ -import java.io.File; import java.util.Map; import org.apache.maven.doxia.siterenderer.DocumentRenderer; @@ -37,7 +36,7 @@ public class DoxiaBean private Map<String, DocumentRenderer> documents; - private File generatedSiteDirectory; + private SiteRenderingContext generatedSiteContext; /** * @param context @@ -45,11 +44,11 @@ public class DoxiaBean * @param generatedSiteDirectory */ public DoxiaBean( SiteRenderingContext context, Map<String, DocumentRenderer> documents, - File generatedSiteDirectory ) + SiteRenderingContext generatedSiteContext ) { this.context = context; this.documents = documents; - this.generatedSiteDirectory = generatedSiteDirectory; + this.generatedSiteContext = generatedSiteContext; } public SiteRenderingContext getContext() @@ -72,13 +71,13 @@ public class DoxiaBean this.documents = documents; } - public File getGeneratedSiteDirectory() + public SiteRenderingContext getGeneratedSiteContext() { - return generatedSiteDirectory; + return generatedSiteContext; } - public void setGeneratedSiteDirectory( File generatedSiteDirectory ) + public void setGeneratedSiteContext( SiteRenderingContext generatedSiteContext ) { - this.generatedSiteDirectory = generatedSiteDirectory; + this.generatedSiteContext = generatedSiteContext; } } Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java?rev=1720982&r1=1720981&r2=1720982&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/DoxiaFilter.java Sun Dec 20 00:38:35 2015 @@ -34,9 +34,7 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; -import java.io.File; import java.io.IOException; -import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Map; @@ -100,7 +98,7 @@ public class DoxiaFilter // Handle locale request SiteRenderingContext context; Map<String, DocumentRenderer> documents; - File generatedSiteDirectory; + SiteRenderingContext generatedSiteContext; String localeWanted = null; for ( Locale locale : localesList ) @@ -121,7 +119,7 @@ public class DoxiaFilter } context = defaultDoxiaBean.getContext(); documents = defaultDoxiaBean.getDocuments(); - generatedSiteDirectory = defaultDoxiaBean.getGeneratedSiteDirectory(); + generatedSiteContext = defaultDoxiaBean.getGeneratedSiteContext(); } else { @@ -132,7 +130,7 @@ public class DoxiaFilter } context = i18nDoxiaBean.getContext(); documents = i18nDoxiaBean.getDocuments(); - generatedSiteDirectory = i18nDoxiaBean.getGeneratedSiteDirectory(); + generatedSiteContext = i18nDoxiaBean.getGeneratedSiteContext(); } // ---------------------------------------------------------------------- @@ -160,41 +158,36 @@ public class DoxiaFilter } } } + + return; } catch ( RendererException e ) { throw new ServletException( e ); } } - else if ( generatedSiteDirectory != null && generatedSiteDirectory.exists() ) + else if ( generatedSiteContext != null ) { - context.getSiteDirectories().clear(); - context.addSiteDirectory( generatedSiteDirectory ); try { - Map<String, DocumentRenderer> locateDocuments = siteRenderer.locateDocumentFiles( context ); + Map<String, DocumentRenderer> locateDocuments = + siteRenderer.locateDocumentFiles( generatedSiteContext ); if ( locateDocuments.containsKey( path ) ) { DocumentRenderer renderer = locateDocuments.get( path ); - renderer.renderDocument( servletResponse.getWriter(), siteRenderer, context ); + renderer.renderDocument( servletResponse.getWriter(), siteRenderer, generatedSiteContext ); + + return; } } catch ( RendererException e ) { throw new ServletException( e ); } - - List<File> originalSiteDirectories = new ArrayList<File>( context.getSiteDirectories() ); - for ( File dir : originalSiteDirectories ) - { - context.addSiteDirectory( dir ); - } - } - else - { - filterChain.doFilter( servletRequest, servletResponse ); } + + filterChain.doFilter( servletRequest, servletResponse ); } /** Modified: maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java?rev=1720982&r1=1720981&r2=1720982&view=diff ============================================================================== --- maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java (original) +++ maven/plugins/trunk/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/run/SiteRunMojo.java Sun Dec 20 00:38:35 2015 @@ -174,17 +174,23 @@ public class SiteRunMojo i18nContext.setInputEncoding( getInputEncoding() ); i18nContext.setOutputEncoding( getOutputEncoding() ); + SiteRenderingContext i18nGeneratedSiteContext = createSiteRenderingContext( locale ); + i18nGeneratedSiteContext.setInputEncoding( getInputEncoding() ); + i18nGeneratedSiteContext.setOutputEncoding( getOutputEncoding() ); + i18nGeneratedSiteContext.getSiteDirectories().clear(); + Map<String, DocumentRenderer> i18nDocuments = locateDocuments( i18nContext, reports, locale ); DoxiaBean doxiaBean; if ( defaultLocale.equals( locale ) ) { - doxiaBean = new DoxiaBean( i18nContext, i18nDocuments, generatedSiteDirectory ); + i18nGeneratedSiteContext.addSiteDirectory( generatedSiteDirectory ); + doxiaBean = new DoxiaBean( i18nContext, i18nDocuments, i18nGeneratedSiteContext ); } else { - doxiaBean = - new DoxiaBean( i18nContext, i18nDocuments, new File( generatedSiteDirectory, - locale.getLanguage() ) ); + i18nGeneratedSiteContext.addSiteDirectory( new File( generatedSiteDirectory, + locale.getLanguage() ) ); + doxiaBean = new DoxiaBean( i18nContext, i18nDocuments, i18nGeneratedSiteContext ); } i18nDoxiaContexts.put( locale.getLanguage(), doxiaBean );