package org.apache.maven.plugin.nar;
//Copied from Maven maven-surefire-plugin 2.3, 2006-2007
/*
* 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 java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.artifact.metadata.ArtifactMetadataSource;
import org.apache.maven.artifact.resolver.ArtifactNotFoundException;
import org.apache.maven.artifact.resolver.ArtifactResolutionException;
import org.apache.maven.artifact.resolver.ArtifactResolutionResult;
import org.apache.maven.artifact.resolver.ArtifactResolver;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.resolver.filter.ExcludesArtifactFilter;
import org.apache.maven.artifact.versioning.InvalidVersionSpecificationException;
import org.apache.maven.artifact.versioning.VersionRange;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;
import org.apache.maven.surefire.booter.ForkConfiguration;
import org.apache.maven.surefire.booter.SurefireBooter;
import org.apache.maven.surefire.booter.SurefireBooterForkException;
import org.apache.maven.surefire.booter.SurefireExecutionException;
import org.apache.maven.surefire.report.BriefConsoleReporter;
import org.apache.maven.surefire.report.BriefFileReporter;
import org.apache.maven.surefire.report.ConsoleReporter;
import org.apache.maven.surefire.report.DetailedConsoleReporter;
import org.apache.maven.surefire.report.FileReporter;
import org.apache.maven.surefire.report.ForkingConsoleReporter;
import org.apache.maven.surefire.report.XMLReporter;
import org.codehaus.plexus.util.StringUtils;
/**
* Run integration tests using Surefire. This goal was copied from Maven's surefire plugin to accomodate a few things
* for the NAR plugin: 1. To test a jar file with its native module we can only run after the package phase, so we use
* the integration-test phase. 2. We need to set java.library.path to an AOL (architecture-os-linker) specific value,
* but AOL is only known in the NAR plugin and thus cannot be set from the pom. 3. To have the java.library.path
* definition picked up by java we need the "pertest" forkmode. To use this goal you need to put the test sources in the
* regular test directories but disable the running of the tests by the maven-surefire-plugin.
*
* @author Jason van Zyl (modified by Mark Donszelmann, noted by DUNS)
* @version 2.3 maven repository maven-surefire-plugin and changes by DUNS
* @requiresDependencyResolution test
* @goal nar-integration-test
* @phase integration-test
*/
// DUNS, changed class name, inheritence, goal and phase
public class NarIntegrationTestMojo
extends AbstractCompileMojo
{
// DUNS added test for JNI module
private boolean testJNIModule()
{
for ( Iterator i = getLibraries().iterator(); i.hasNext(); )
{
Library lib = (Library) i.next();
if ( lib.getType().equals( Library.JNI ) )
return true;
}
return false;
}
// DUNS added to get names
/**
* @parameter expression="${project}"
* @readonly
* @required
*/
private MavenProject project;
// DUNS added because of naming conflict
/**
* Skip running of NAR plugins (any) altogether.
*
* @parameter expression="${nar.skip}" default-value="false"
*/
private boolean skipNAR;
/**
* Set this to 'true' to bypass unit tests entirely. Its use is NOT RECOMMENDED, but quite convenient on occasion.
*
* @parameter expression="${maven.test.skip}"
*/
private boolean skip;
/**
* Set this to 'true' to bypass unit tests execution, but still compile them. Its use is NOT RECOMMENDED, but quite
* convenient on occasion.
*
* @parameter expression="${maven.test.skip.exec}"
*/
private boolean skipExec;
/**
* Set this to true to ignore a failure during testing. Its use is NOT RECOMMENDED, but quite convenient on
* occasion.
*
* @parameter expression="${maven.test.failure.ignore}"
*/
private boolean testFailureIgnore;
/**
* The base directory of the project being tested. This can be obtained in your unit test by
* System.getProperty("basedir").
*
* @parameter expression="${basedir}"
* @required
*/
private File basedir;
// FIXME this field is not used
/**
* The directory containing generated classes of the project being tested.
*
* @parameter expression="${project.build.outputDirectory}"
* @required
*/
// DUNS
// private File classesDirectory;
/**
* The directory containing generated test classes of the project being tested.
*
* @parameter expression="${project.build.testOutputDirectory}"
* @required
*/
private File testClassesDirectory;
/**
* The classpath elements of the project being tested.
*
* @parameter expression="${project.testClasspathElements}"
* @required
* @readonly
*/
private List classpathElements;
/**
* Base directory where all reports are written to.
*
* @parameter expression="${project.build.directory}/surefire-reports"
*/
private File reportsDirectory;
/**
* The test source directory containing test class sources.
*
* @parameter expression="${project.build.testSourceDirectory}"
* @required
*/
private File testSourceDirectory;
/**
* Specify this parameter(can be a comma separated list) if you want to use the test pattern matching notation, Ant
* pattern matching, to select tests to run. The Ant pattern will be used to create an include pattern formatted
* like **/${test}.java
When used, the includes
and excludes
patterns
* parameters are ignored.
*
* @parameter expression="${test}"
*/
private String test;
/**
* List of patterns (separated by commas) used to specify the tests that should be included in testing. When not
* specified and when the test
parameter is not specified, the default includes will be
* **/Test*.java **/*Test.java **/*TestCase.java
*
* @parameter
*/
private List includes;
/**
* List of patterns (separated by commas) used to specify the tests that should be excluded in testing. When not
* specified and when the test
parameter is not specified, the default excludes will be
* **/Abstract*Test.java **/Abstract*TestCase.java **/*$*
*
* @parameter
*/
private List excludes;
/**
* ArtifactRepository of the localRepository. To obtain the directory of localRepository in unit tests use
* System.setProperty( "localRepository").
*
* @parameter expression="${localRepository}"
* @required
* @readonly
*/
// DUNS removed, already in superclass
// private ArtifactRepository localRepository;
/**
* List of System properties to pass to the JUnit tests.
*
* @parameter
*/
private Properties systemProperties;
/**
* Map of of plugin artifacts.
*
* @parameter expression="${plugin.artifactMap}"
* @required
* @readonly
*/
private Map pluginArtifactMap;
/**
* Map of of project artifacts.
*
* @parameter expression="${project.artifactMap}"
* @required
* @readonly
*/
private Map projectArtifactMap;
/**
* Option to print summary of test suites or just print the test cases that has errors.
*
* @parameter expression="${surefire.printSummary}" default-value="true"
*/
private boolean printSummary;
/**
* Selects the formatting for the test report to be generated. Can be set as brief or plain.
*
* @parameter expression="${surefire.reportFormat}" default-value="brief"
*/
private String reportFormat;
/**
* Option to generate a file test report or just output the test report to the console.
*
* @parameter expression="${surefire.useFile}" default-value="true"
*/
private boolean useFile;
/**
* When forking, set this to true to redirect the unit test standard output to a file (found in
* reportsDirectory/testName-output.txt).
*
* @parameter expression="${maven.test.redirectTestOutputToFile}" default-value="false"
*/
private boolean redirectTestOutputToFile;
/**
* Option to specify the forking mode. Can be "never", "once" or "always". "none" and "pertest" are also accepted
* for backwards compatibility.
*
* @parameter expression="${forkMode}" default-value="once"
*/
private String forkMode;
/**
* Option to specify the jvm (or path to the java executable) to use with the forking options. For the default, the
* jvm will be the same as the one used to run Maven.
*
* @parameter expression="${jvm}"
*/
private String jvm;
/**
* Arbitrary options to set on the command line.
*
* @parameter expression="${argLine}"
*/
private String argLine;
/**
* Additional environments to set on the command line.
*
* @parameter
*/
private Map environmentVariables = new HashMap();
/**
* Command line working directory.
*
* @parameter
*/
private File workingDirectory;
/**
* When false it makes tests run using the standard classloader delegation instead of the default Maven isolated
* classloader. Only used when forking (forkMode is not "none").
* Setting it to false helps with some problems caused by conflicts between xml parsers in the classpath and the
* Java 5 provider parser.
*
* @parameter expression="${childDelegation}" default-value="false"
*/
private boolean childDelegation;
/**
* Groups for this test. Only classes/methods/etc decorated with one of the groups specified here will be included
* in test run, if specified.
*
* @parameter expression="${groups}"
*/
private String groups;
/**
* Excluded groups. Any methods/classes/etc with one of the groups specified in this list will specifically not be
* run.
*
* @parameter expression="${excludedGroups}"
*/
private String excludedGroups;
/**
* List of TestNG suite xml file locations, seperated by commas. It should be noted that if suiteXmlFiles is
* specified, no other tests will be run, ignoring other parameters, like includes and excludes.
*
* @parameter
*/
private File[] suiteXmlFiles;
/**
* The attribute thread-count allows you to specify how many threads should be allocated for this execution. Only
* makes sense to use in conjunction with parallel.
*
* @parameter expression="${threadCount}" default-value="5"
*/
private int threadCount;
/**
* When you use the parallel attribute, TestNG will try to run all your test methods in separate threads, except for
* methods that depend on each other, which will be run in the same thread in order to respect their order of
* execution.
*
* @parameter expression="${parallel}" default-value="false"
* @todo test how this works with forking, and console/file output parallelism
*/
private boolean parallel;
/**
* Whether to trim the stack trace in the reports to just the lines within the test, or show the full trace.
*
* @parameter expression="${trimStackTrace}" default-value="true"
*/
private boolean trimStackTrace;
/**
* Resolves the artifacts needed.
*
* @component
*/
private ArtifactResolver artifactResolver;
/**
* Creates the artifact
*
* @component
*/
private ArtifactFactory artifactFactory;
/**
* The plugin remote repositories declared in the pom.
*
* @parameter expression="${project.pluginArtifactRepositories}"
*/
private List remoteRepositories;
/**
* For retrieval of artifact's metadata.
*
* @component
*/
private ArtifactMetadataSource metadataSource;
private static final String BRIEF_REPORT_FORMAT = "brief";
private static final String PLAIN_REPORT_FORMAT = "plain";
private Properties originalSystemProperties;
/**
* Flag to disable the generation of report files in xml format.
*
* @parameter expression="${disableXmlReport}" default-value="false"
*/
private boolean disableXmlReport;
/**
* Option to pass dependencies to the system's classloader instead of using an isolated class loader when forking.
* Prevents problems with JDKs which implement the service provider lookup mechanism by using the system's
* classloader.
*
* @parameter expression="${surefire.useSystemClassLoader}" default-value="false"
*/
private boolean useSystemClassLoader;
public void execute()
throws MojoExecutionException, MojoFailureException
{
if ( verifyParameters() )
{
SurefireBooter surefireBooter = constructSurefireBooter();
getLog().info( "Surefire report directory: " + reportsDirectory );
boolean success;
try
{
success = surefireBooter.run();
}
catch ( SurefireBooterForkException e )
{
throw new MojoExecutionException( e.getMessage(), e );
}
catch ( SurefireExecutionException e )
{
throw new MojoExecutionException( e.getMessage(), e );
}
if ( originalSystemProperties != null )
{
// restore system properties
System.setProperties( originalSystemProperties );
}
if ( !success )
{
String msg = "There are test failures.";
if ( testFailureIgnore )
{
getLog().error( msg );
}
else
{
throw new MojoFailureException( msg );
}
}
}
}
private boolean verifyParameters()
throws MojoFailureException
{
// DUNS, shouldSkip() does not work...
if ( skipNAR )
{
getLog().info( "***********************************************************************" );
getLog().info( "NAR Integration Tests are SKIPPED since no NAR libraries were built." );
getLog().info( "***********************************************************************" );
return false;
}
if ( skip || skipExec )
{
getLog().info( "Tests are skipped." );
return false;
}
else if ( !testClassesDirectory.exists() )
{
getLog().info( "No tests to run." );
return false;
}
if ( parallel )
{
if ( threadCount < 1 )
{
throw new MojoFailureException( "Must have at least one thread in parallel mode" );
}
}
if ( useSystemClassLoader && ForkConfiguration.FORK_NEVER.equals( forkMode ) )
{
getLog().warn( "useSystemClassloader=true setting has no effect when not forking" );
}
return true;
}
private SurefireBooter constructSurefireBooter()
throws MojoExecutionException, MojoFailureException
{
SurefireBooter surefireBooter = new SurefireBooter();
Artifact surefireArtifact = (Artifact) pluginArtifactMap.get( "org.apache.maven.surefire:surefire-booter" );
if ( surefireArtifact == null )
{
throw new MojoExecutionException( "Unable to locate surefire-booter in the list of plugin artifacts" );
}
surefireArtifact.isSnapshot(); // TODO: this is ridiculous, but it
// fixes getBaseVersion to be -SNAPSHOT
// if needed
Artifact junitArtifact;
Artifact testNgArtifact;
try
{
addArtifact( surefireBooter, surefireArtifact );
junitArtifact = (Artifact) projectArtifactMap.get( "junit:junit" );
// TODO: this is pretty manual, but I'd rather not require the
// plugin > dependencies section right now
testNgArtifact = (Artifact) projectArtifactMap.get( "org.testng:testng" );
if ( testNgArtifact != null )
{
addArtifact( surefireBooter, testNgArtifact );
VersionRange range = VersionRange.createFromVersionSpec( "[4.7,)" );
if ( !range.containsVersion( testNgArtifact.getSelectedVersion() ) )
{
throw new MojoFailureException(
"TestNG support requires version 4.7 or above. You have declared version "
+ testNgArtifact.getVersion() );
}
// The plugin uses a JDK based profile to select the right
// testng. We might be explicity using a
// different one since its based on the source level, not the
// JVM. Prune using the filter.
addProvider( surefireBooter, "surefire-testng", surefireArtifact.getBaseVersion(), testNgArtifact );
}
else if ( junitArtifact != null && junitArtifact.getBaseVersion().startsWith( "4" ) )
{
addProvider( surefireBooter, "surefire-junit4", surefireArtifact.getBaseVersion(), null );
}
else
{
// add the JUnit provider as default - it doesn't require JUnit
// to be present,
// since it supports POJO tests.
addProvider( surefireBooter, "surefire-junit", surefireArtifact.getBaseVersion(), null );
}
}
catch ( ArtifactNotFoundException e )
{
throw new MojoExecutionException( "Unable to locate required surefire provider dependency: "
+ e.getMessage(), e );
}
catch ( InvalidVersionSpecificationException e )
{
throw new MojoExecutionException( "Error determining the TestNG version requested: " + e.getMessage(), e );
}
catch ( ArtifactResolutionException e )
{
throw new MojoExecutionException( "Error to resolving surefire provider dependency: " + e.getMessage(), e );
}
if ( suiteXmlFiles != null && suiteXmlFiles.length > 0 )
{
if ( testNgArtifact == null )
{
throw new MojoExecutionException( "suiteXmlFiles is configured, but there is no TestNG dependency" );
}
for ( int i = 0; i < suiteXmlFiles.length; i++ )
{
File file = suiteXmlFiles[i];
if ( file.exists() )
{
surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGXmlTestSuite", new Object[] {
file, testSourceDirectory.getAbsolutePath() } );
}
}
}
else
{
List includes;
List excludes;
if ( test != null )
{
// Check to see if we are running a single test. The raw
// parameter will
// come through if it has not been set.
// FooTest -> **/FooTest.java
includes = new ArrayList();
excludes = new ArrayList();
String[] testRegexes = StringUtils.split( test, "," );
for ( int i = 0; i < testRegexes.length; i++ )
{
includes.add( "**/" + testRegexes[i] + ".java" );
}
}
else
{
includes = this.includes;
excludes = this.excludes;
// defaults here, qdox doesn't like the end javadoc value
// Have to wrap in an ArrayList as surefire expects an ArrayList
// instead of a List for some reason
if ( includes == null || includes.size() == 0 )
{
includes =
new ArrayList( Arrays.asList( new String[] { "**/Test*.java", "**/*Test.java",
"**/*TestCase.java" } ) );
}
if ( excludes == null || excludes.size() == 0 )
{
excludes =
new ArrayList( Arrays.asList( new String[] { "**/Abstract*Test.java",
"**/Abstract*TestCase.java", "**/*$*" } ) );
}
}
if ( testNgArtifact != null )
{
surefireBooter.addTestSuite( "org.apache.maven.surefire.testng.TestNGDirectoryTestSuite", new Object[] {
testClassesDirectory, includes, excludes, groups, excludedGroups, Boolean.valueOf( parallel ),
new Integer( threadCount ), testSourceDirectory.getAbsolutePath() } );
}
else
{
String junitDirectoryTestSuite;
// DUNS NP check
if ( junitArtifact != null && junitArtifact.getBaseVersion().startsWith( "4" ) )
{
junitDirectoryTestSuite = "org.apache.maven.surefire.junit4.JUnit4DirectoryTestSuite";
}
else
{
junitDirectoryTestSuite = "org.apache.maven.surefire.junit.JUnitDirectoryTestSuite";
}
// fall back to JUnit, which also contains POJO support. Also it
// can run
// classes compiled against JUnit since it has a dependency on
// JUnit itself.
surefireBooter.addTestSuite( junitDirectoryTestSuite, new Object[] { testClassesDirectory, includes,
excludes } );
}
}
// ----------------------------------------------------------------------
//
// ----------------------------------------------------------------------
getLog().debug( "Test Classpath :" );
// no need to add classes/test classes directory here - they are in the
// classpath elements already
for ( Iterator i = classpathElements.iterator(); i.hasNext(); )
{
String classpathElement = (String) i.next();
getLog().debug( " " + classpathElement );
surefireBooter.addClassPathUrl( classpathElement );
}
// ----------------------------------------------------------------------
// Forking
// ----------------------------------------------------------------------
ForkConfiguration fork = new ForkConfiguration();
// DUNS
if ( project.getPackaging().equals( "nar" ) || ( getNarManager().getNarDependencies( "test" ).size() > 0 ) )
forkMode = "pertest";
fork.setForkMode( forkMode );
processSystemProperties( !fork.isForking() );
if ( getLog().isDebugEnabled() )
{
showMap( systemProperties, "system property" );
}
if ( fork.isForking() )
{
fork.setSystemProperties( systemProperties );
if ( jvm == null || "".equals( jvm ) )
{
// use the same JVM as the one used to run Maven (the
// "java.home" one)
jvm = System.getProperty( "java.home" ) + File.separator + "bin" + File.separator + "java";
getLog().debug( "Using JVM: " + jvm );
}
fork.setJvmExecutable( jvm );
if ( workingDirectory != null )
{
fork.setWorkingDirectory( workingDirectory );
}
else
{
fork.setWorkingDirectory( basedir );
}
// BEGINDUNS
if ( argLine == null )
argLine = "";
StringBuffer javaLibraryPath = new StringBuffer();
if ( testJNIModule() )
{
// Add libraries to java.library.path for testing
File jniLibraryPathEntry = new File( project.getBasedir(), "target/nar/lib/" + getAOL() + "/jni" );
if ( jniLibraryPathEntry.exists() )
{
getLog().debug( "Adding library directory to java.library.path: " + jniLibraryPathEntry );
if ( javaLibraryPath.length() > 0 )
javaLibraryPath.append( File.pathSeparator );
javaLibraryPath.append( jniLibraryPathEntry );
}
File sharedLibraryPathEntry = new File( project.getBasedir(), "target/nar/lib/" + getAOL() + "/shared" );
if ( sharedLibraryPathEntry.exists() )
{
getLog().debug( "Adding library directory to java.library.path: " + sharedLibraryPathEntry );
if ( javaLibraryPath.length() > 0 )
javaLibraryPath.append( File.pathSeparator );
javaLibraryPath.append( sharedLibraryPathEntry );
}
// add jar file to classpath, as one may want to read a
// properties file for artifactId and version
String jarFile = "target/" + project.getArtifactId() + "-" + project.getVersion() + ".jar";
getLog().debug( "Adding to surefire test classpath: " + jarFile );
surefireBooter.addClassPathUrl( jarFile );
}
List dependencies = getNarManager().getNarDependencies( "test" );
for ( Iterator i = dependencies.iterator(); i.hasNext(); )
{
NarArtifact dependency = (NarArtifact) i.next();
// FIXME this should be overridable
// NarInfo info = dependency.getNarInfo();
// String binding = info.getBinding(getAOL(), Library.STATIC);
// NOTE: fixed to shared, jni
String[] bindings = { Library.SHARED, Library.JNI };
for ( int j = 0; j < bindings.length; j++ )
{
String binding = bindings[j];
if ( !binding.equals( Library.STATIC ) )
{
File depLibPathEntry =
new File( getNarManager().getNarFile( dependency ).getParent(), "nar/lib/" + getAOL() + "/"
+ binding );
if ( depLibPathEntry.exists() )
{
getLog().debug( "Adding dependency directory to java.library.path: " + depLibPathEntry );
if ( javaLibraryPath.length() > 0 )
javaLibraryPath.append( File.pathSeparator );
javaLibraryPath.append( depLibPathEntry );
}
}
}
}
// add final javalibrary path
if ( javaLibraryPath.length() > 0 )
{
// NOTE java.library.path only works for the jni lib itself, and
// not for its dependent shareables.
// NOTE: java.library.path does not work with arguments with
// spaces as
// SureFireBooter splits the line in parts and then quotes
// it wrongly
NarUtil.addLibraryPathToEnv( javaLibraryPath.toString(), environmentVariables, getOS() );
}
// necessary to find WinSxS
if ( getOS().equals( OS.WINDOWS ) )
{
environmentVariables.put( "SystemRoot", NarUtil.getEnv( "SystemRoot", "SystemRoot", "C:\\Windows" ) );
}
// ENDDUNS
fork.setArgLine( argLine );
fork.setEnvironmentVariables( environmentVariables );
if ( getLog().isDebugEnabled() )
{
showMap( environmentVariables, "environment variable" );
fork.setDebug( true );
}
}
surefireBooter.setRedirectTestOutputToFile( redirectTestOutputToFile );
surefireBooter.setForkConfiguration( fork );
surefireBooter.setChildDelegation( childDelegation );
surefireBooter.setReportsDirectory( reportsDirectory );
surefireBooter.setUseSystemClassLoader( useSystemClassLoader );
addReporters( surefireBooter, fork.isForking() );
return surefireBooter;
}
private void showMap( Map map, String setting )
{
for ( Iterator i = map.keySet().iterator(); i.hasNext(); )
{
String key = (String) i.next();
String value = (String) map.get( key );
getLog().debug( "Setting " + setting + " [" + key + "]=[" + value + "]" );
}
}
private void addProvider( SurefireBooter surefireBooter, String provider, String version, Artifact filteredArtifact )
throws ArtifactNotFoundException, ArtifactResolutionException
{
Artifact providerArtifact =
artifactFactory.createDependencyArtifact( "org.apache.maven.surefire", provider,
VersionRange.createFromVersion( version ), "jar", null,
Artifact.SCOPE_TEST );
ArtifactResolutionResult result = resolveArtifact( filteredArtifact, providerArtifact );
for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
{
Artifact artifact = (Artifact) i.next();
getLog().debug( "Adding to surefire test classpath: " + artifact.getFile().getAbsolutePath() );
surefireBooter.addSurefireClassPathUrl( artifact.getFile().getAbsolutePath() );
}
}
private ArtifactResolutionResult resolveArtifact( Artifact filteredArtifact, Artifact providerArtifact )
throws ArtifactResolutionException, ArtifactNotFoundException
{
ArtifactFilter filter = null;
if ( filteredArtifact != null )
{
filter =
new ExcludesArtifactFilter( Collections.singletonList( filteredArtifact.getGroupId() + ":"
+ filteredArtifact.getArtifactId() ) );
}
Artifact originatingArtifact = artifactFactory.createBuildArtifact( "dummy", "dummy", "1.0", "jar" );
// DUNS, use access method rather than "localRepository" field.
return artifactResolver.resolveTransitively( Collections.singleton( providerArtifact ), originatingArtifact,
getLocalRepository(), remoteRepositories, metadataSource, filter );
}
private void addArtifact( SurefireBooter surefireBooter, Artifact surefireArtifact )
throws ArtifactNotFoundException, ArtifactResolutionException
{
ArtifactResolutionResult result = resolveArtifact( null, surefireArtifact );
for ( Iterator i = result.getArtifacts().iterator(); i.hasNext(); )
{
Artifact artifact = (Artifact) i.next();
getLog().debug( "Adding to surefire booter test classpath: " + artifact.getFile().getAbsolutePath() );
surefireBooter.addSurefireBootClassPathUrl( artifact.getFile().getAbsolutePath() );
}
}
protected void processSystemProperties( boolean setInSystem )
{
if ( systemProperties == null )
{
systemProperties = new Properties();
}
originalSystemProperties = (Properties) System.getProperties().clone();
systemProperties.setProperty( "basedir", basedir.getAbsolutePath() );
// DUNS, use access method rather than "localRepository" field.
systemProperties.setProperty( "localRepository", getLocalRepository().getBasedir() );
if ( setInSystem )
{
// Add all system properties configured by the user
Iterator iter = systemProperties.keySet().iterator();
while ( iter.hasNext() )
{
String key = (String) iter.next();
String value = systemProperties.getProperty( key );
System.setProperty( key, value );
}
}
}
/**
*
* Adds Reporters that will generate reports with different formatting. *
* The Reporter that will be added will be based on the value of the parameter useFile, reportFormat, and * printSummary. * * @param surefireBooter The surefire booter that will run tests. * @param forking */ private void addReporters( SurefireBooter surefireBooter, boolean forking ) { Boolean trimStackTrace = Boolean.valueOf( this.trimStackTrace ); if ( useFile ) { if ( printSummary ) { if ( forking ) { surefireBooter.addReport( ForkingConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); } else { surefireBooter.addReport( ConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); } } if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) ) { surefireBooter.addReport( BriefFileReporter.class.getName(), new Object[] { reportsDirectory, trimStackTrace } ); } else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) ) { surefireBooter.addReport( FileReporter.class.getName(), new Object[] { reportsDirectory, trimStackTrace } ); } } else { if ( BRIEF_REPORT_FORMAT.equals( reportFormat ) ) { surefireBooter.addReport( BriefConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); } else if ( PLAIN_REPORT_FORMAT.equals( reportFormat ) ) { surefireBooter.addReport( DetailedConsoleReporter.class.getName(), new Object[] { trimStackTrace } ); } } if ( !disableXmlReport ) { surefireBooter.addReport( XMLReporter.class.getName(), new Object[] { reportsDirectory, trimStackTrace } ); } } /** * @return SurefirePlugin Returns the skipExec. */ public boolean isSkipExec() { return this.skipExec; } /** * @param skipExec the skipExec to set */ public void setSkipExec( boolean skipExec ) { this.skipExec = skipExec; } }