diff --git a/maven-plugins/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java b/maven-plugins/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java index 7e2f29f7d1..d6a4fc400b 100644 --- a/maven-plugins/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java +++ b/maven-plugins/maven-checkstyle-plugin/src/main/java/org/apache/maven/plugin/checkstyle/CheckstyleReport.java @@ -38,15 +38,16 @@ import org.codehaus.plexus.util.StringUtils; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.net.URL; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Properties; import java.util.ResourceBundle; -import java.util.Map; /** * @author Emmanuel Venisse @@ -240,7 +241,8 @@ public class CheckstyleReport { if ( !canGenerateReport() ) { - throw new MavenReportException( "No source directory to process for style" ); + // TODO: failure if not a report + throw new MavenReportException( "No source directory to process for checkstyle" ); } Map files = executeCheckstyle(); @@ -253,22 +255,30 @@ public class CheckstyleReport private Map executeCheckstyle() throws MavenReportException { - File[] files = getFilesToProcess( includes, excludes ); + File[] files = new File[0]; + try + { + files = getFilesToProcess( includes, excludes ); + } + catch ( IOException e ) + { + throw new MavenReportException( "Error getting files to process", e ); + } String configFile = getConfigFile(); Properties overridingProperties = getOverridingProperties(); - ModuleFactory moduleFactory = getModuleFactory(); - - FilterSet filterSet = getSuppressions(); - Checker checker; try { - Configuration config = ConfigurationLoader.loadConfiguration( configFile, new PropertiesExpander( - overridingProperties ) ); + ModuleFactory moduleFactory = getModuleFactory(); + + FilterSet filterSet = getSuppressions(); + + Configuration config = + ConfigurationLoader.loadConfiguration( configFile, new PropertiesExpander( overridingProperties ) ); checker = new Checker(); @@ -313,6 +323,8 @@ public class CheckstyleReport if ( failsOnError && nbErrors > 0 ) { + // TODO: should be a failure, not an error. Report is not meant to throw an exception here (so site would + // work regardless of config), but should record this information throw new MavenReportException( "There are " + nbErrors + " formatting errors." ); } @@ -348,6 +360,7 @@ public class CheckstyleReport } else { + // TODO: failure if not a report throw new MavenReportException( "Invalid output file format: (" + outputFileFormat + "). Must be 'plain' or 'xml'." ); } @@ -359,25 +372,27 @@ public class CheckstyleReport private OutputStream getOutputStream( File file ) throws MavenReportException { + File parentFile = file.getAbsoluteFile().getParentFile(); + + if ( !parentFile.exists() ) + { + parentFile.mkdirs(); + } + + FileOutputStream fileOutputStream = null; try { - File parentFile = file.getAbsoluteFile().getParentFile(); - - if ( !parentFile.exists() ) - { - parentFile.mkdirs(); - } - - return new FileOutputStream( file ); + fileOutputStream = new FileOutputStream( file ); } - catch ( IOException ioe ) + catch ( FileNotFoundException e ) { - throw new MavenReportException( "Can't open file for output: " + file.getAbsolutePath(), ioe ); + throw new MavenReportException( "Unable to create output stream: " + file, e ); } + return fileOutputStream; } private File[] getFilesToProcess( String includes, String excludes ) - throws MavenReportException + throws MavenReportException, IOException { StringBuffer excludesStr = new StringBuffer(); @@ -397,16 +412,7 @@ public class CheckstyleReport excludesStr.append( defaultExcludes[i] ); } - List files; - - try - { - files = FileUtils.getFiles( sourceDirectory, includes, excludesStr.toString() ); - } - catch ( IOException ioe ) - { - throw new MavenReportException( "Failed to get source files", ioe ); - } + List files = FileUtils.getFiles( sourceDirectory, includes, excludesStr.toString() ); return (File[]) files.toArray( EMPTY_FILE_ARRAY ); } @@ -420,7 +426,14 @@ public class CheckstyleReport { if ( propertiesFile != null ) { - p.load( new FileInputStream( propertiesFile ) ); + if ( propertiesFile.exists() ) + { + p.load( new FileInputStream( propertiesFile ) ); + } + else + { + getLog().warn( "File '" + propertiesFile + "' not found - skipping" ); + } } else if ( propertiesURL != null ) { @@ -465,6 +478,7 @@ public class CheckstyleReport } else { + // TODO: failure if not a report throw new MavenReportException( "Invalid configuration file format: " + format ); } @@ -472,21 +486,14 @@ public class CheckstyleReport } private ModuleFactory getModuleFactory() - throws MavenReportException + throws CheckstyleException { if ( StringUtils.isEmpty( packageNamesFile ) ) { return null; } - try - { - return PackageNamesLoader.loadModuleFactory( packageNamesFile ); - } - catch ( CheckstyleException ce ) - { - throw new MavenReportException( "failed to load package names XML: " + packageNamesFile, ce ); - } + return PackageNamesLoader.loadModuleFactory( packageNamesFile ); } private FilterSet getSuppressions() diff --git a/maven-plugins/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java b/maven-plugins/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java index 92ea239fc3..d52c46a160 100644 --- a/maven-plugins/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java +++ b/maven-plugins/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocReport.java @@ -19,6 +19,7 @@ package org.apache.maven.plugin.javadoc; import org.apache.commons.lang.ClassUtils; import org.apache.commons.lang.SystemUtils; import org.apache.commons.lang.math.NumberUtils; +import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; @@ -28,6 +29,7 @@ import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.FileUtils; import org.codehaus.plexus.util.IOUtil; import org.codehaus.plexus.util.StringUtils; +import org.codehaus.plexus.util.cli.CommandLineException; import org.codehaus.plexus.util.cli.CommandLineUtils; import org.codehaus.plexus.util.cli.Commandline; import org.codehaus.plexus.util.cli.DefaultConsumer; @@ -579,29 +581,29 @@ public class JavadocReport protected void executeReport( Locale locale ) throws MavenReportException { - try - { - int actualYear = Calendar.getInstance().get( Calendar.YEAR ); - String year = String.valueOf( actualYear ); + int actualYear = Calendar.getInstance().get( Calendar.YEAR ); + String year = String.valueOf( actualYear ); - Model model = getProject().getModel(); - if ( model.getInceptionYear() != null ) + Model model = getProject().getModel(); + if ( model.getInceptionYear() != null ) + { + if ( StringUtils.isNumeric( model.getInceptionYear() ) ) { - if ( StringUtils.isNumeric( model.getInceptionYear() ) ) + if ( Integer.valueOf( model.getInceptionYear() ).intValue() != actualYear ) { - if ( Integer.valueOf( model.getInceptionYear() ).intValue() != actualYear ) - { - year = model.getInceptionYear() + "-" + String.valueOf( actualYear ); - } - } - else - { - getLog().warn( "The inception year is not a valid year." ); + year = model.getInceptionYear() + "-" + String.valueOf( actualYear ); } } + else + { + getLog().warn( "The inception year is not a valid year." ); + } + } - StringBuffer options = new StringBuffer(); - StringBuffer classpath = new StringBuffer(); + StringBuffer options = new StringBuffer(); + StringBuffer classpath = new StringBuffer(); + try + { for ( Iterator i = getProject().getCompileClasspathElements().iterator(); i.hasNext(); ) { classpath.append( (String) i.next() ); @@ -611,226 +613,251 @@ public class JavadocReport classpath.append( PATH_SEPARATOR ); } } + } + catch ( DependencyResolutionRequiredException e ) + { + throw new MavenReportException( "Error in plugin descriptor - compile dependencies were not resolved", e ); + } - if ( classpath.length() > 0 ) + if ( classpath.length() > 0 ) + { + options.append( "-classpath " ); + options.append( quotedPathArgument( classpath.toString() ) ); + } + + StringBuffer sourcePath = new StringBuffer(); + StringBuffer files = new StringBuffer(); + for ( Iterator i = getProject().getCompileSourceRoots().iterator(); i.hasNext(); ) + { + String sourceDirectory = (String) i.next(); + String[] fileList = FileUtils.getFilesFromExtension( sourceDirectory, new String[]{"java"} ); + if ( fileList != null && fileList.length != 0 ) { - options.append( "-classpath " ); - options.append( quotedPathArgument( classpath.toString() ) ); - } - - StringBuffer sourcePath = new StringBuffer(); - StringBuffer files = new StringBuffer(); - for ( Iterator i = getProject().getCompileSourceRoots().iterator(); i.hasNext(); ) - { - String sourceDirectory = (String) i.next(); - String[] fileList = FileUtils.getFilesFromExtension( sourceDirectory, new String[]{"java"} ); - if ( fileList != null && fileList.length != 0 ) + for ( int j = 0; j < fileList.length; j++ ) { - for ( int j = 0; j < fileList.length; j++ ) - { - files.append( quotedPathArgument( fileList[j] ) ); - files.append( "\n" ); - } - } - - sourcePath.append( sourceDirectory ); - - if ( i.hasNext() ) - { - sourcePath.append( PATH_SEPARATOR ); + files.append( quotedPathArgument( fileList[j] ) ); + files.append( "\n" ); } } - if ( files.length() == 0 ) + sourcePath.append( sourceDirectory ); + + if ( i.hasNext() ) { - return; + sourcePath.append( PATH_SEPARATOR ); } + } - File javadocDirectory = getReportOutputDirectory(); + if ( files.length() == 0 ) + { + return; + } - if ( !javadocDirectory.equals( getOutputDirectory() ) ) - { - // we're in site-embedded report mode, so Doxia has set the - // reportOutputDirectory to the basedir of the site. - // Append 'apidocs'. - javadocDirectory = new File( javadocDirectory, "apidocs" ); - } - javadocDirectory.mkdirs(); + File javadocDirectory = getReportOutputDirectory(); - File file = new File( javadocDirectory, "files" ); - file.deleteOnExit(); + if ( !javadocDirectory.equals( getOutputDirectory() ) ) + { + // we're in site-embedded report mode, so Doxia has set the + // reportOutputDirectory to the basedir of the site. + // Append 'apidocs'. + javadocDirectory = new File( javadocDirectory, "apidocs" ); + } + javadocDirectory.mkdirs(); + + File file = new File( javadocDirectory, "files" ); + file.deleteOnExit(); + try + { FileUtils.fileWrite( file.getAbsolutePath(), files.toString() ); + } + catch ( IOException e ) + { + throw new MavenReportException( "Unable to write temporary file for command execution", e ); + } + try + { // Copy default style sheet copyDefaultStylesheet( javadocDirectory ); + } + catch ( IOException e ) + { + throw new MavenReportException( "Unable to copy default stylesheet", e ); + } - Commandline cmd = new Commandline(); + Commandline cmd = new Commandline(); - List arguments = new ArrayList(); + List arguments = new ArrayList(); - cmd.setWorkingDirectory( javadocDirectory.getAbsolutePath() ); - cmd.setExecutable( getJavadocPath() ); + cmd.setWorkingDirectory( javadocDirectory.getAbsolutePath() ); + cmd.setExecutable( getJavadocPath() ); - // General javadoc arguments - addArgIfNotEmpty( arguments, "-locale", quotedArgument( this.locale ) ); - addArgIf( arguments, breakiterator, "-breakiterator", 1.4f ); - if ( !StringUtils.isEmpty( doclet ) ) + // General javadoc arguments + addArgIfNotEmpty( arguments, "-locale", quotedArgument( this.locale ) ); + addArgIf( arguments, breakiterator, "-breakiterator", 1.4f ); + if ( !StringUtils.isEmpty( doclet ) ) + { + addArgIfNotEmpty( arguments, "-doclet", quotedArgument( doclet ) ); + addArgIfNotEmpty( arguments, "-docletPath", quotedPathArgument( docletPath ) ); + } + addArgIfNotEmpty( arguments, "-encoding", quotedArgument( encoding ) ); + addArgIfNotEmpty( arguments, "-extdirs", quotedPathArgument( extdirs ) ); + addArgIfNotEmpty( arguments, "-exclude", quotedArgument( excludePackageNames ), 1.4f ); + if ( !StringUtils.isEmpty( maxmemory ) ) + { + // Allow '128' or '128m' + if ( NumberUtils.isDigits( maxmemory ) ) { - addArgIfNotEmpty( arguments, "-doclet", quotedArgument( doclet ) ); - addArgIfNotEmpty( arguments, "-docletPath", quotedPathArgument( docletPath ) ); - } - addArgIfNotEmpty( arguments, "-encoding", quotedArgument( encoding ) ); - addArgIfNotEmpty( arguments, "-extdirs", quotedPathArgument( extdirs ) ); - addArgIfNotEmpty( arguments, "-exclude", quotedArgument( excludePackageNames ), 1.4f ); - if ( !StringUtils.isEmpty( maxmemory ) ) - { - // Allow '128' or '128m' - if ( NumberUtils.isDigits( maxmemory ) ) - { - addArgIf( arguments, true, "-J-Xmx" + maxmemory + "m" ); - } - else - { - if ( ( NumberUtils.isDigits( maxmemory.substring( 0, maxmemory.length() - 1 ) ) ) && - ( maxmemory.toLowerCase().endsWith( "m" ) ) ) - { - addArgIf( arguments, true, "-J-Xmx" + maxmemory ); - } - else - { - getLog().error( - "The maxmemory '" + maxmemory + "' is not a valid number. Ignore this option." ); - } - } - } - - if ( !StringUtils.isEmpty( minmemory ) ) - { - // Allow '128' or '128m' - if ( NumberUtils.isDigits( minmemory ) ) - { - addArgIf( arguments, true, "-J-Xms" + minmemory + "m" ); - } - else - { - if ( ( NumberUtils.isDigits( minmemory.substring( 0, minmemory.length() - 1 ) ) ) && - ( minmemory.toLowerCase().endsWith( "m" ) ) ) - { - addArgIf( arguments, true, "-J-Xms" + minmemory ); - } - else - { - getLog().error( - "The minmemory '" + minmemory + "' is not a valid number. Ignore this option." ); - } - } - } - - if ( old && SystemUtils.isJavaVersionAtLeast( 1.4f ) ) - { - getLog().warn( "Javadoc 1.4 doesn't support the -1.1 switch anymore. Ignore this option." ); + addArgIf( arguments, true, "-J-Xmx" + maxmemory + "m" ); } else { - addArgIf( arguments, old, "-1.1" ); - } - - addArgIfNotEmpty( arguments, "-overview", quotedArgument( overview ) ); - addArgIf( arguments, showPackage, "-package" ); - addArgIf( arguments, showPrivate, "-private" ); - addArgIf( arguments, showProtected, "-protected" ); - addArgIf( arguments, public_, "-public" ); - addArgIf( arguments, quiet, "-quiet", 1.4f ); - addArgIfNotEmpty( arguments, "-source", quotedArgument( source ), 1.4f ); - addArgIf( arguments, verbose, "-verbose" ); - addArgIfNotEmpty( arguments, "-additionalparam", quotedArgument( additionalparam ) ); - - addArgIfNotEmpty( arguments, "-sourcePath", quotedPathArgument( sourcePath.toString() ) ); - - // javadoc arguments for default doclet - if ( StringUtils.isEmpty( doclet ) ) - { - bottom = StringUtils.replace( bottom, "{currentYear}", year ); - if ( project.getInceptionYear() != null ) + if ( ( NumberUtils.isDigits( maxmemory.substring( 0, maxmemory.length() - 1 ) ) ) && + ( maxmemory.toLowerCase().endsWith( "m" ) ) ) { - bottom = StringUtils.replace( bottom, "{inceptionYear}", project.getInceptionYear() ); + addArgIf( arguments, true, "-J-Xmx" + maxmemory ); } else { - bottom = StringUtils.replace( bottom, "{inceptionYear}-", "" ); + getLog().error( "The maxmemory '" + maxmemory + "' is not a valid number. Ignore this option." ); } - - if ( StringUtils.isEmpty( stylesheetfile ) ) - { - stylesheetfile = javadocDirectory + File.separator + DEFAULT_CSS_NAME; - } - // End Specify default values - - addArgIf( arguments, author, "-author" ); - addArgIfNotEmpty( arguments, "-bottom", quotedArgument( bottom ) ); - addArgIf( arguments, breakiterator, "-breakiterator", 1.4f ); - addArgIfNotEmpty( arguments, "-charset", quotedArgument( charset ) ); - addArgIfNotEmpty( arguments, "-d", quotedPathArgument( javadocDirectory.toString() ) ); - addArgIf( arguments, docfilessubdirs, "-docfilessubdirs", 1.4f ); - addArgIfNotEmpty( arguments, "-docencoding", quotedArgument( docencoding ) ); - addArgIfNotEmpty( arguments, "-doctitle", quotedArgument( doctitle ) ); - addArgIfNotEmpty( arguments, "-excludedocfilessubdir", quotedPathArgument( excludedocfilessubdir ), - 1.4f ); - addArgIfNotEmpty( arguments, "-footer", quotedArgument( footer ) ); - addArgIfNotEmpty( arguments, "-group", quotedArgument( group ), true ); - addArgIfNotEmpty( arguments, "-header", quotedArgument( header ) ); - addArgIfNotEmpty( arguments, "-helpfile", quotedPathArgument( helpfile ) ); - addArgIfNotEmpty( arguments, "-link", quotedPathArgument( link ), true ); - addArgIfNotEmpty( arguments, "-linkoffline", quotedPathArgument( linkoffline ), true ); - addArgIf( arguments, linksource, "-linksource", 1.4f ); - addArgIf( arguments, nodeprecated, "-nodeprecated" ); - addArgIf( arguments, nodeprecatedlist, "-nodeprecatedlist" ); - addArgIf( arguments, nocomment, "-nocomment", 1.4f ); - addArgIf( arguments, nohelp, "-nohelp" ); - addArgIf( arguments, noindex, "-noindex" ); - addArgIf( arguments, nonavbar, "-nonavbar" ); - addArgIfNotEmpty( arguments, "-noqualifier", quotedArgument( noqualifier ), 1.4f ); - addArgIf( arguments, nosince, "-nosince" ); - addArgIf( arguments, notree, "-notree" ); - addArgIf( arguments, serialwarn, "-serialwarn" ); - addArgIf( arguments, splitindex, "-splitindex" ); - addArgIfNotEmpty( arguments, "-stylesheetfile", quotedPathArgument( stylesheetfile ) ); - addArgIfNotEmpty( arguments, "-tag", quotedArgument( tag ), 1.4f, true ); - addArgIfNotEmpty( arguments, "-taglet", quotedArgument( taglet ), 1.4f ); - addArgIfNotEmpty( arguments, "-tagletpath", quotedPathArgument( tagletpath ), 1.4f ); - addArgIf( arguments, use, "-use" ); - addArgIf( arguments, version, "-version" ); - addArgIfNotEmpty( arguments, "-windowtitle", quotedArgument( windowtitle ) ); } + } - if ( options.length() > 0 ) + if ( !StringUtils.isEmpty( minmemory ) ) + { + // Allow '128' or '128m' + if ( NumberUtils.isDigits( minmemory ) ) { - File optionsFile = new File( javadocDirectory, "options" ); - for ( Iterator it = arguments.iterator(); it.hasNext(); ) + addArgIf( arguments, true, "-J-Xms" + minmemory + "m" ); + } + else + { + if ( ( NumberUtils.isDigits( minmemory.substring( 0, minmemory.length() - 1 ) ) ) && + ( minmemory.toLowerCase().endsWith( "m" ) ) ) { - options.append( " " ); - options.append( (String) it.next() ); + addArgIf( arguments, true, "-J-Xms" + minmemory ); } - FileUtils.fileWrite( optionsFile.getAbsolutePath(), options.toString() ); - cmd.createArgument().setValue( "@options" ); - optionsFile.deleteOnExit(); + else + { + getLog().error( "The minmemory '" + minmemory + "' is not a valid number. Ignore this option." ); + } + } + } + + if ( old && SystemUtils.isJavaVersionAtLeast( 1.4f ) ) + { + getLog().warn( "Javadoc 1.4 doesn't support the -1.1 switch anymore. Ignore this option." ); + } + else + { + addArgIf( arguments, old, "-1.1" ); + } + + addArgIfNotEmpty( arguments, "-overview", quotedArgument( overview ) ); + addArgIf( arguments, showPackage, "-package" ); + addArgIf( arguments, showPrivate, "-private" ); + addArgIf( arguments, showProtected, "-protected" ); + addArgIf( arguments, public_, "-public" ); + addArgIf( arguments, quiet, "-quiet", 1.4f ); + addArgIfNotEmpty( arguments, "-source", quotedArgument( source ), 1.4f ); + addArgIf( arguments, verbose, "-verbose" ); + addArgIfNotEmpty( arguments, "-additionalparam", quotedArgument( additionalparam ) ); + + addArgIfNotEmpty( arguments, "-sourcePath", quotedPathArgument( sourcePath.toString() ) ); + + // javadoc arguments for default doclet + if ( StringUtils.isEmpty( doclet ) ) + { + bottom = StringUtils.replace( bottom, "{currentYear}", year ); + if ( project.getInceptionYear() != null ) + { + bottom = StringUtils.replace( bottom, "{inceptionYear}", project.getInceptionYear() ); + } + else + { + bottom = StringUtils.replace( bottom, "{inceptionYear}-", "" ); } - cmd.createArgument().setValue( "@files" ); + if ( StringUtils.isEmpty( stylesheetfile ) ) + { + stylesheetfile = javadocDirectory + File.separator + DEFAULT_CSS_NAME; + } + // End Specify default values - getLog().info( Commandline.toString( cmd.getCommandline() ) ); + addArgIf( arguments, author, "-author" ); + addArgIfNotEmpty( arguments, "-bottom", quotedArgument( bottom ) ); + addArgIf( arguments, breakiterator, "-breakiterator", 1.4f ); + addArgIfNotEmpty( arguments, "-charset", quotedArgument( charset ) ); + addArgIfNotEmpty( arguments, "-d", quotedPathArgument( javadocDirectory.toString() ) ); + addArgIf( arguments, docfilessubdirs, "-docfilessubdirs", 1.4f ); + addArgIfNotEmpty( arguments, "-docencoding", quotedArgument( docencoding ) ); + addArgIfNotEmpty( arguments, "-doctitle", quotedArgument( doctitle ) ); + addArgIfNotEmpty( arguments, "-excludedocfilessubdir", quotedPathArgument( excludedocfilessubdir ), 1.4f ); + addArgIfNotEmpty( arguments, "-footer", quotedArgument( footer ) ); + addArgIfNotEmpty( arguments, "-group", quotedArgument( group ), true ); + addArgIfNotEmpty( arguments, "-header", quotedArgument( header ) ); + addArgIfNotEmpty( arguments, "-helpfile", quotedPathArgument( helpfile ) ); + addArgIfNotEmpty( arguments, "-link", quotedPathArgument( link ), true ); + addArgIfNotEmpty( arguments, "-linkoffline", quotedPathArgument( linkoffline ), true ); + addArgIf( arguments, linksource, "-linksource", 1.4f ); + addArgIf( arguments, nodeprecated, "-nodeprecated" ); + addArgIf( arguments, nodeprecatedlist, "-nodeprecatedlist" ); + addArgIf( arguments, nocomment, "-nocomment", 1.4f ); + addArgIf( arguments, nohelp, "-nohelp" ); + addArgIf( arguments, noindex, "-noindex" ); + addArgIf( arguments, nonavbar, "-nonavbar" ); + addArgIfNotEmpty( arguments, "-noqualifier", quotedArgument( noqualifier ), 1.4f ); + addArgIf( arguments, nosince, "-nosince" ); + addArgIf( arguments, notree, "-notree" ); + addArgIf( arguments, serialwarn, "-serialwarn" ); + addArgIf( arguments, splitindex, "-splitindex" ); + addArgIfNotEmpty( arguments, "-stylesheetfile", quotedPathArgument( stylesheetfile ) ); + addArgIfNotEmpty( arguments, "-tag", quotedArgument( tag ), 1.4f, true ); + addArgIfNotEmpty( arguments, "-taglet", quotedArgument( taglet ), 1.4f ); + addArgIfNotEmpty( arguments, "-tagletpath", quotedPathArgument( tagletpath ), 1.4f ); + addArgIf( arguments, use, "-use" ); + addArgIf( arguments, version, "-version" ); + addArgIfNotEmpty( arguments, "-windowtitle", quotedArgument( windowtitle ) ); + } - int exitCode = CommandLineUtils.executeCommandLine( cmd, new DefaultConsumer(), new DefaultConsumer() ); + if ( options.length() > 0 ) + { + File optionsFile = new File( javadocDirectory, "options" ); + for ( Iterator it = arguments.iterator(); it.hasNext(); ) + { + options.append( " " ); + options.append( (String) it.next() ); + } + try + { + FileUtils.fileWrite( optionsFile.getAbsolutePath(), options.toString() ); + } + catch ( IOException e ) + { + throw new MavenReportException( "Unable to write temporary file for command execution", e ); + } + cmd.createArgument().setValue( "@options" ); + optionsFile.deleteOnExit(); + } + + cmd.createArgument().setValue( "@files" ); + + getLog().info( Commandline.toString( cmd.getCommandline() ) ); + + CommandLineUtils.StringStreamConsumer err = new CommandLineUtils.StringStreamConsumer(); + try + { + int exitCode = CommandLineUtils.executeCommandLine( cmd, new DefaultConsumer(), err ); if ( exitCode != 0 ) { - throw new MavenReportException( "Exit code: " + exitCode ); + throw new MavenReportException( "Exit code: " + exitCode + " - " + err.getOutput() ); } } - catch ( Exception e ) + catch ( CommandLineException e ) { - getLog().debug( e ); - throw new MavenReportException( "An error has occurred in javadoc report generation.", e ); + throw new MavenReportException( "Unable to execute javadoc command", e ); } } @@ -1034,10 +1061,8 @@ public class JavadocReport * @param resource the resource * @return InputStream An input stream for reading the resource, or null * if the resource could not be found - * @throws Exception if any */ private static InputStream getStream( String resource ) - throws Exception { return JavadocReport.class.getClassLoader().getResourceAsStream( resource ); } @@ -1047,14 +1072,14 @@ public class JavadocReport * loader to the output directory. * * @param outputDirectory the output directory - * @throws Exception if any + * @throws IOException if any * @see #DEFAULT_CSS_NAME */ private void copyDefaultStylesheet( File outputDirectory ) - throws Exception + throws IOException { - if ( ( outputDirectory == null ) || ( !outputDirectory.exists() ) ) + if ( outputDirectory == null || !outputDirectory.exists() ) { throw new IOException( "The outputDirectory " + outputDirectory + " doesn't exists." ); } @@ -1084,6 +1109,6 @@ public class JavadocReport public boolean isExternalReport() { - return true; + return true && super.isExternalReport(); } } diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/CimReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/CimReport.java index b56d5f5832..fc5ca12407 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/CimReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/CimReport.java @@ -22,7 +22,6 @@ import org.apache.maven.model.Notifier; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.StringUtils; @@ -107,7 +106,6 @@ public class CimReport } public void executeReport( Locale locale ) - throws MavenReportException { CimRenderer r = new CimRenderer( getSink(), getProject().getModel(), locale ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java index f1010be2c6..a12682dc44 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/DependenciesReport.java @@ -24,7 +24,6 @@ import org.apache.maven.project.MavenProjectBuilder; import org.apache.maven.project.ProjectBuildingException; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; @@ -151,7 +150,6 @@ public class DependenciesReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { DependenciesRenderer r = new DependenciesRenderer( getSink(), getProject(), locale, mavenProjectBuilder, artifactFactory, localRepository ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/IssueTrackingReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/IssueTrackingReport.java index 78467794b2..3329b2f9d5 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/IssueTrackingReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/IssueTrackingReport.java @@ -21,7 +21,6 @@ import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.StringUtils; @@ -117,7 +116,6 @@ public class IssueTrackingReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { IssueTrackingRenderer r = new IssueTrackingRenderer( getSink(), getProject().getModel(), locale ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java index 9f053e8190..4524981576 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/LicenseReport.java @@ -21,7 +21,6 @@ import org.apache.maven.model.License; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.IOUtil; @@ -128,7 +127,6 @@ public class LicenseReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { LicenseRenderer r = new LicenseRenderer( getSink(), getProject(), locale ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/MailingListsReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/MailingListsReport.java index e23500b9c5..3179257ac3 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/MailingListsReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/MailingListsReport.java @@ -21,7 +21,6 @@ import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.StringUtils; @@ -119,7 +118,6 @@ public class MailingListsReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { MailingListsRenderer r = new MailingListsRenderer( getSink(), getProject().getModel(), locale ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java index ee54e63448..9e67fdc040 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/ScmReport.java @@ -21,7 +21,6 @@ import org.apache.maven.model.Scm; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.apache.maven.scm.manager.NoSuchScmProviderException; import org.apache.maven.scm.manager.ScmManager; import org.apache.maven.scm.provider.clearcase.repository.ClearCaseScmProviderRepository; @@ -135,7 +134,6 @@ public class ScmReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { ScmRenderer r = new ScmRenderer( scmManager, getSink(), getProject().getModel(), locale ); diff --git a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java index 85bb1888ef..d8c2a76e50 100644 --- a/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java +++ b/maven-plugins/maven-project-info-reports-plugin/src/main/java/org/apache/maven/report/projectinfo/TeamListReport.java @@ -22,7 +22,6 @@ import org.apache.maven.model.Model; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.AbstractMavenReport; import org.apache.maven.reporting.AbstractMavenReportRenderer; -import org.apache.maven.reporting.MavenReportException; import org.codehaus.doxia.sink.Sink; import org.codehaus.doxia.site.renderer.SiteRenderer; import org.codehaus.plexus.util.StringUtils; @@ -121,7 +120,6 @@ public class TeamListReport * @see org.apache.maven.reporting.AbstractMavenReport#executeReport(java.util.Locale) */ public void executeReport( Locale locale ) - throws MavenReportException { TeamListRenderer r = new TeamListRenderer( getSink(), getProject().getModel(), locale ); diff --git a/maven-plugins/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java b/maven-plugins/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java index 7791d6a2d2..a52b7f8249 100644 --- a/maven-plugins/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java +++ b/maven-plugins/maven-site-plugin/src/main/java/org/apache/maven/plugins/site/SiteMojo.java @@ -18,6 +18,7 @@ package org.apache.maven.plugins.site; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.project.MavenProject; import org.apache.maven.reporting.MavenReport; import org.apache.maven.reporting.MavenReportException; @@ -44,6 +45,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; @@ -51,7 +53,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; import java.util.StringTokenizer; -import java.util.Comparator; /** * Generates the project site. @@ -150,7 +151,7 @@ public class SiteMojo /** * Internationalization. * - * @component + * @component */ private I18N i18n; @@ -178,7 +179,7 @@ public class SiteMojo * @see org.apache.maven.plugin.Mojo#execute() */ public void execute() - throws MojoExecutionException + throws MojoExecutionException, MojoFailureException { if ( templateDirectory == null ) { @@ -289,11 +290,7 @@ public class SiteMojo } // Exception if a file is duplicate - String msg = createDuplicateExceptionMsg( duplicate, locale ); - if ( msg != null ) - { - throw new MavenReportException( msg ); - } + checkDuplicates( duplicate, locale ); String siteDescriptor = getSiteDescriptor( reports, locale, projectInfos, projectReports ); @@ -1132,13 +1129,13 @@ public class SiteMojo } /** - * Create an Exception message if a file is duplicate. + * Throw an exception if a file is duplicate. * * @param duplicate a map of duplicate files * @param locale the current locale - * @return the Message to throw */ - private String createDuplicateExceptionMsg( Map duplicate, Locale locale ) + private void checkDuplicates( Map duplicate, Locale locale ) + throws MojoFailureException { if ( duplicate.size() > 0 ) { @@ -1182,11 +1179,9 @@ public class SiteMojo if ( sb != null ) { - return sb.toString(); + throw new MojoFailureException( sb.toString() ); } } - - return null; } /**