Author: dennisl Date: Sun Feb 10 05:28:36 2008 New Revision: 620284 URL: http://svn.apache.org/viewvc?rev=620284&view=rev Log: [MCHANGES-88] NoSuchMethodError with maven 2.0.8 when generating changes-report Submitted by: Niall Pemberton Reviewed by: Dennis Lundberg
Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java (with props) Modified: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesMojo.java maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java Added: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java?rev=620284&view=auto ============================================================================== --- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java (added) +++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java Sun Feb 10 05:28:36 2008 @@ -0,0 +1,221 @@ +package org.apache.maven.plugin.changes; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactNotFoundException; +import org.apache.maven.artifact.resolver.ArtifactResolutionException; +import org.apache.maven.artifact.resolver.ArtifactResolver; +import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException; +import org.apache.maven.artifact.versioning.VersionRange; +import org.apache.maven.doxia.module.xhtml.decoration.render.RenderingContext; +import org.apache.maven.doxia.site.decoration.Body; +import org.apache.maven.doxia.site.decoration.DecorationModel; +import org.apache.maven.doxia.site.decoration.Skin; +import org.apache.maven.doxia.siterenderer.Renderer; +import org.apache.maven.doxia.siterenderer.RendererException; +import org.apache.maven.doxia.siterenderer.SiteRenderingContext; +import org.apache.maven.doxia.siterenderer.sink.SiteRendererSink; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.apache.maven.reporting.AbstractMavenReport; +import org.apache.maven.reporting.MavenReportException; +import org.codehaus.plexus.i18n.I18N; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.Writer; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; + +/** + * Base class with the things that should be in AbstractMavenReport anyway. + * + * Note: this file was copied from maven-project-info-reports. + * + * @author <a href="mailto:[EMAIL PROTECTED]">Brett Porter</a> + * + */ +public abstract class AbstractChangesReport + extends AbstractMavenReport +{ + /** + * Report output directory. + * + * @parameter expression="${project.reporting.outputDirectory}" + * @required + */ + protected File outputDirectory; + + /** + * Doxia Site Renderer. + * + * @component + */ + protected Renderer siteRenderer; + + /** + * The Maven Project. + * + * @parameter expression="${project}" + * @required + * @readonly + */ + protected MavenProject project; + + /** + * Local Repository. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + */ + protected ArtifactRepository localRepository; + + /** + * @component + */ + protected ArtifactResolver resolver; + + /** + * @component + */ + protected ArtifactFactory factory; + + /** + * Internationalization. + * + * @component + */ + protected I18N i18n; + + private File getSkinArtifactFile() + throws MojoExecutionException + { + Skin skin = Skin.getDefaultSkin(); + + String version = skin.getVersion(); + Artifact artifact; + try + { + if ( version == null ) + { + version = Artifact.RELEASE_VERSION; + } + VersionRange versionSpec = VersionRange.createFromVersionSpec( version ); + artifact = factory.createDependencyArtifact( skin.getGroupId(), skin.getArtifactId(), versionSpec, "jar", + null, null ); + + resolver.resolve( artifact, project.getRemoteArtifactRepositories(), localRepository ); + } + catch ( InvalidVersionSpecificationException e ) + { + throw new MojoExecutionException( "The skin version '" + version + "' is not valid: " + e.getMessage() ); + } + catch ( ArtifactResolutionException e ) + { + throw new MojoExecutionException( "Unable to find skin", e ); + } + catch ( ArtifactNotFoundException e ) + { + throw new MojoExecutionException( "The skin does not exist: " + e.getMessage() ); + } + + return artifact.getFile(); + } + + public void execute() + throws MojoExecutionException + { + if ( !canGenerateReport() ) + { + return; + } + + // TODO: push to a helper? Could still be improved by taking more of the site information from the site plugin + try + { + DecorationModel model = new DecorationModel(); + model.setBody( new Body() ); + Map attributes = new HashMap(); + attributes.put( "outputEncoding", "UTF-8" ); + Locale locale = Locale.getDefault(); + SiteRenderingContext siteContext = siteRenderer.createContextForSkin( getSkinArtifactFile(), attributes, + model, getName( locale ), locale ); + + RenderingContext context = new RenderingContext( outputDirectory, getOutputName() + ".html" ); + + SiteRendererSink sink = new SiteRendererSink( context ); + generate( sink, locale ); + + outputDirectory.mkdirs(); + + Writer writer = new FileWriter( new File( outputDirectory, getOutputName() + ".html" ) ); + + siteRenderer.generateDocument( writer, sink, siteContext ); + + siteRenderer.copyResources( siteContext, new File( project.getBasedir(), "src/site/resources" ), + outputDirectory ); + } + catch ( RendererException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + catch ( IOException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + catch ( MavenReportException e ) + { + throw new MojoExecutionException( + "An error has occurred in " + getName( Locale.ENGLISH ) + " report generation.", e ); + } + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getOutputDirectory() + */ + protected String getOutputDirectory() + { + return outputDirectory.getAbsolutePath(); + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getProject() + */ + protected MavenProject getProject() + { + return project; + } + + /** + * @see org.apache.maven.reporting.AbstractMavenReport#getSiteRenderer() + */ + protected Renderer getSiteRenderer() + { + return siteRenderer; + } +} Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/AbstractChangesReport.java ------------------------------------------------------------------------------ svn:keywords = Date Id Modified: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesMojo.java?rev=620284&r1=620283&r2=620284&view=diff ============================================================================== --- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesMojo.java (original) +++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/changes/ChangesMojo.java Sun Feb 10 05:28:36 2008 @@ -21,7 +21,6 @@ import org.apache.maven.doxia.siterenderer.Renderer; import org.apache.maven.project.MavenProject; -import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.MavenReportException; import org.codehaus.plexus.util.FileUtils; @@ -39,32 +38,9 @@ * @version $Id$ */ public class ChangesMojo - extends AbstractMavenReport + extends AbstractChangesReport { /** - * Directory where reports will go. - * - * @parameter expression="${project.reporting.outputDirectory}" - * @required - * @readonly - */ - private File outputDirectory; - - /** - * @parameter expression="${component.org.apache.maven.doxia.siterenderer.Renderer}" - * @required - * @readonly - */ - private Renderer siteRenderer; - - /** - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** * The path of the changes.xml file that will be converted into an html report. * * @parameter expression="${basedir}/src/changes/changes.xml" @@ -153,24 +129,9 @@ return getBundle( locale ).getString( "report.changes.description" ); } - protected Renderer getSiteRenderer() - { - return siteRenderer; - } - - protected MavenProject getProject() - { - return project; - } - public String getOutputName() { return "changes-report"; - } - - protected String getOutputDirectory() - { - return outputDirectory.getAbsolutePath(); } private ResourceBundle getBundle( Locale locale ) Modified: maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java?rev=620284&r1=620283&r2=620284&view=diff ============================================================================== --- maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java (original) +++ maven/plugins/trunk/maven-changes-plugin/src/main/java/org/apache/maven/plugin/jira/JiraMojo.java Sun Feb 10 05:28:36 2008 @@ -20,8 +20,8 @@ */ import org.apache.maven.doxia.siterenderer.Renderer; +import org.apache.maven.plugin.changes.AbstractChangesReport; import org.apache.maven.project.MavenProject; -import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.MavenReportException; import org.apache.maven.settings.Settings; @@ -37,18 +37,9 @@ * @version $Id$ */ public class JiraMojo - extends AbstractMavenReport + extends AbstractChangesReport { /** - * Output directory where the report will be placed. - * - * @parameter expression="${project.reporting.outputDirectory}" - * @required - * @readonly - */ - private File outputDirectory; - - /** * Path to the JIRA XML file, which will be parsed. * * @parameter expression="${project.build.directory}/jira-results.xml " @@ -58,24 +49,6 @@ private File jiraXmlPath; /** - * Doxia Site Renderer. - * - * @parameter expression="${component.org.apache.maven.doxia.siterenderer.Renderer}" - * @required - * @readonly - */ - private Renderer siteRenderer; - - /** - * The Maven Project. - * - * @parameter expression="${project}" - * @required - * @readonly - */ - private MavenProject project; - - /** * Settings XML configuration. * * @parameter expression="${settings}" @@ -307,24 +280,9 @@ return getBundle( locale ).getString( "report.jira.description" ); } - protected Renderer getSiteRenderer() - { - return siteRenderer; - } - - protected MavenProject getProject() - { - return project; - } - public String getOutputName() { return "jira-report"; - } - - protected String getOutputDirectory() - { - return outputDirectory.getAbsolutePath(); } private ResourceBundle getBundle( Locale locale )