diff --git a/maven-plugins/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java b/maven-plugins/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java index bb3563cce1..987158f202 100644 --- a/maven-plugins/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java +++ b/maven-plugins/maven-clover-plugin/src/main/java/org/apache/maven/plugin/clover/CloverInstrumentMojo.java @@ -1,5 +1,7 @@ +package org.apache.maven.plugin.clover; + /* - * Copyright 2005 The Apache Software Foundation. + * Copyright 2001-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,43 +15,42 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.maven.plugin.clover; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.io.File; +import com.cenqua.clover.CloverInstr; import org.apache.maven.artifact.Artifact; import org.apache.maven.artifact.factory.ArtifactFactory; import org.apache.maven.plugin.MojoExecutionException; -import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.project.MavenProject; -import com.cenqua.clover.CloverInstr; +import java.io.File; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; /** + * Instrument source roots. + * + * @author Vincent Massol + * @version $Id$ * @goal instrument * @phase generate-sources * @requiresDependencyResolution test - * @description Instrument source roots - * - * @author Vincent Massol - * @version $Id$ */ -public class CloverInstrumentMojo extends AbstractCloverMojo +public class CloverInstrumentMojo + extends AbstractCloverMojo { /** * @parameter * @required */ - private String cloverOutputDirectory; + private String cloverOutputDirectory; /** * @parameter * @required */ - private String cloverDatabase; + private String cloverDatabase; /** * @parameter expression="${project}" @@ -75,33 +76,35 @@ public class CloverInstrumentMojo extends AbstractCloverMojo private void init() { - new File(this.cloverOutputDirectory).mkdirs(); + new File( this.cloverOutputDirectory ).mkdirs(); - this.cloverOutputSourceDirectory = new File(this.cloverOutputDirectory, "src").getPath(); + this.cloverOutputSourceDirectory = new File( this.cloverOutputDirectory, "src" ).getPath(); } - public void execute() throws MojoExecutionException + public void execute() + throws MojoExecutionException { init(); registerLicenseFile(); - - int result = CloverInstr.mainImpl(createCliArgs()); - if (result != 0) - { - throw new MojoExecutionException("Clover has failed to instrument the source files"); - } - addGeneratedSourcesToCompileRoots(); -// addCloverDependencyToCompileClasspath(); + int result = CloverInstr.mainImpl( createCliArgs() ); + if ( result != 0 ) + { + throw new MojoExecutionException( "Clover has failed to instrument the source files" ); + } + + addGeneratedSourcesToCompileRoots(); + addCloverDependencyToCompileClasspath(); // Explicitely set the output directory to be the Clover one so that all other plugins executing // thereafter output files in the Clover output directory and not in the main output directory. // TODO: Ulgy hack below. Changing the directory should be enough for changing the values of all other // properties depending on it! - this.project.getBuild().setDirectory(this.cloverOutputDirectory); - this.project.getBuild().setOutputDirectory(new File(this.cloverOutputDirectory, "classes").getPath()); - this.project.getBuild().setTestOutputDirectory(new File(this.cloverOutputDirectory, "test-classes").getPath()); + this.project.getBuild().setDirectory( this.cloverOutputDirectory ); + this.project.getBuild().setOutputDirectory( new File( this.cloverOutputDirectory, "classes" ).getPath() ); + this.project.getBuild().setTestOutputDirectory( + new File( this.cloverOutputDirectory, "test-classes" ).getPath() ); } /** @@ -109,48 +112,48 @@ public class CloverInstrumentMojo extends AbstractCloverMojo */ private void addGeneratedSourcesToCompileRoots() { - this.project.getCompileSourceRoots().remove(0); - this.project.addCompileSourceRoot(this.cloverOutputSourceDirectory); + this.project.getCompileSourceRoots().remove( 0 ); + this.project.addCompileSourceRoot( this.cloverOutputSourceDirectory ); } -/* + private void addCloverDependencyToCompileClasspath() + throws MojoExecutionException { Artifact cloverArtifact = null; Iterator artifacts = this.pluginArtifacts.iterator(); - while (artifacts.hasNext()) + while ( artifacts.hasNext() && cloverArtifact == null ) { Artifact artifact = (Artifact) artifacts.next(); - if (artifact.getArtifactId().equalsIgnoreCase("clover")) + if ( "clover".equalsIgnoreCase( artifact.getArtifactId() ) ) { cloverArtifact = artifact; - break; } } - List artifactsToAdd = new ArrayList(); - artifactsToAdd.add(cloverArtifact); - - this.project.addArtifacts(artifactsToAdd, this.factory); + if ( cloverArtifact == null ) + { + throw new MojoExecutionException( "Couldn't find 'clover' artifact in plugin dependencies" ); + } + + cloverArtifact = factory.createArtifact( cloverArtifact.getGroupId(), cloverArtifact.getArtifactId(), + cloverArtifact.getVersion(), Artifact.SCOPE_COMPILE, + cloverArtifact.getType() ); + + // TODO: use addArtifacts + Set set = new HashSet( project.getDependencyArtifacts() ); + set.add( cloverArtifact ); + project.setDependencyArtifacts( set ); } -*/ - /** - * @return the CLI args to be passed to CloverInstr - * @todo handle multiple source roots. At the moment only the first source root is instrumented - */ - private String[] createCliArgs() - { - String [] cliArgs = { - - // TODO: Temporary while we wait for surefire to be able to fork unit tests. See - // http://jira.codehaus.org/browse/MNG-441 - "-p", "threaded", - "-f", "100", - - "-i", this.cloverDatabase, - "-s", (String) this.project.getCompileSourceRoots().get(0), - "-d", this.cloverOutputSourceDirectory }; - - return cliArgs; - } + /** + * @return the CLI args to be passed to CloverInstr + * @todo handle multiple source roots. At the moment only the first source root is instrumented + */ + private String[] createCliArgs() + { + // TODO: Temporary while we wait for surefire to be able to fork unit tests. See + // http://jira.codehaus.org/browse/MNG-441 + return new String[]{"-p", "threaded", "-f", "100", "-i", this.cloverDatabase, "-s", + (String) this.project.getCompileSourceRoots().get( 0 ), "-d", this.cloverOutputSourceDirectory}; + } }