mirror of https://github.com/apache/maven.git
PR: MNG-619
make clover a compile time dependency of the project after instrumentation git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@219894 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ecb04d2bb8
commit
a6b1274828
|
@ -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;
|
||||
|
||||
/**
|
||||
* @goal instrument
|
||||
* @phase generate-sources
|
||||
* @requiresDependencyResolution test
|
||||
* @description Instrument source roots
|
||||
* Instrument source roots.
|
||||
*
|
||||
* @author <a href="mailto:vmassol@apache.org">Vincent Massol</a>
|
||||
* @version $Id$
|
||||
* @goal instrument
|
||||
* @phase generate-sources
|
||||
* @requiresDependencyResolution test
|
||||
*/
|
||||
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");
|
||||
}
|
||||
int result = CloverInstr.mainImpl( createCliArgs() );
|
||||
if ( result != 0 )
|
||||
{
|
||||
throw new MojoExecutionException( "Clover has failed to instrument the source files" );
|
||||
}
|
||||
|
||||
addGeneratedSourcesToCompileRoots();
|
||||
// addCloverDependencyToCompileClasspath();
|
||||
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);
|
||||
if ( cloverArtifact == null )
|
||||
{
|
||||
throw new MojoExecutionException( "Couldn't find 'clover' artifact in plugin dependencies" );
|
||||
}
|
||||
|
||||
this.project.addArtifacts(artifactsToAdd, this.factory);
|
||||
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};
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue