Hi,
I would like to use Harness for testing our maven plugin (maven 3)
We are downloading an artifact to our local repository.
When running the plugin the download is correctly done but when I try to
test this behavior (download) with harness I get the following error when
running SetupMojoTest :
org.apache.maven.plugin.MojoExecutionException: Could not resolve
artifact: org.apache.commons:commons-lang3:jar:3.4
at SetupMojo.resolveArtifact(SetupMojo.java:62)
at com.oas.maven.mojo.SetupMojo.execute(SetupMojo.java:42)
at
com.oas.maven.mojo.SetupMojoTest.testSomething(SetupMojoTest.java:36)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at junit.framework.TestCase.runTest(TestCase.java:154)
at junit.framework.TestCase.runBare(TestCase.java:127)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:118)
at junit.framework.TestSuite.runTest(TestSuite.java:208)
at junit.framework.TestSuite.run(TestSuite.java:203)
at
org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.apache.maven.artifact.resolver.ArtifactResolutionException:
Could not transfer artifact org.apache.commons:commons-lang3:jar:3.4
from/to central (http://repo.maven.apache.org/maven2): No connector
factories available
org.apache.commons:commons-lang3:jar:3.4
from the specified remote repositories:
central (http://repo.maven.apache.org/maven2, releases=true,
snapshots=true)
at
org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:222)
at
org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:401)
at
org.apache.maven.repository.legacy.LegacyRepositorySystem.resolve(LegacyRepositorySystem.java:353)
at
com.agfa.occ.oas.maven.mojo.SetupMojo.resolveArtifact(SetupMojo.java:60)
... 20 more
Caused by: org.eclipse.aether.resolution.ArtifactResolutionException:
Could not transfer artifact org.apache.commons:commons-lang3:jar:3.4
from/to central (http://repo.maven.apache.org/maven2): No connector
factories available
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:444)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(DefaultArtifactResolver.java:246)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifact(DefaultArtifactResolver.java:223)
at
org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveArtifact(DefaultRepositorySystem.java:294)
at
org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:212)
... 23 more
Caused by: org.eclipse.aether.transfer.ArtifactTransferException: Could
not transfer artifact org.apache.commons:commons-lang3:jar:3.4 from/to
central (http://repo.maven.apache.org/maven2): No connector factories
available
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:531)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolve(DefaultArtifactResolver.java:421)
... 27 more
Caused by: org.eclipse.aether.transfer.NoRepositoryConnectorException: No
connector factories available
at
org.eclipse.aether.internal.impl.DefaultRepositoryConnectorProvider.newRepositoryConnector(DefaultRepositoryConnectorProvider.java:174)
at
org.eclipse.aether.internal.impl.DefaultArtifactResolver.performDownloads(DefaultArtifactResolver.java:516)
... 28 more
------------------------------------------------------------------------------------
maven-plugin : pom.xml
<dependencies>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${version.maven}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>${version.maven}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>${version.maven}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
<version>${version.maven}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>${version.maven}</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-compat</artifactId>
<version>${version.maven}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-aether-provider</artifactId>
<version>${version.maven}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>
</dependencies>
<properties>
<version.maven>3.3.3</version.maven>
</properties>
-----------------------------------------------------------------------------------
@Mojo(name = "setup", threadSafe = true, defaultPhase = LifecyclePhase.
PACKAGE, requiresDependencyResolution = ResolutionScope.TEST)
public class SetupMojo extends AbstractMojo {
@Parameter(defaultValue = "${project}", readonly = true)
protected MavenProject project;
@Component
private RepositorySystem repositorySystem;
@Component
protected ProjectDependenciesResolver projectDependenciesResolver;
@Parameter(defaultValue = "${localRepository}", readonly=true,
required=true)
protected ArtifactRepository localRepository;
@Override
public void execute() throws MojoExecutionException,
MojoFailureException{
final Artifact overlayArtifact = buildArtifact(
"org.apache.commons", "commons-lang3", "3.4");
resolveArtifact(overlayArtifact);
}
private Artifact buildArtifact(final String groupId, final String
artifactId, final String version) {
final Dependency dependency = new Dependency();
dependency.setGroupId(groupId);
dependency.setArtifactId(artifactId);
dependency.setVersion(version);
final Artifact overlayArtifact = repositorySystem
.createDependencyArtifact(dependency);
return overlayArtifact;
}
public File resolveArtifact(final Artifact artifact) throws
MojoExecutionException {
final ArtifactResolutionRequest request = new
ArtifactResolutionRequest()
.setArtifact(artifact)
.setRemoteRepositories(project
.getRemoteArtifactRepositories())
.setLocalRepository(localRepository);
final ArtifactResolutionResult resolutionResult =
repositorySystem.resolve(request);
if(resolutionResult.hasExceptions()){
throw new MojoExecutionException("Could not resolve
artifact: " + artifact, resolutionResult.getExceptions().get(0));
}
getLog().info(artifact + " : " + artifact
.getFile().getAbsolutePath());
return artifact.getFile();
}
}
----------------------------------------------------------------------------------------
public class SetupMojoTest extends AbstractMojoTestCase {
/** {@inheritDoc} */
@Override
protected void setUp() throws Exception {
// required
super.setUp();
}
/** {@inheritDoc} */
@Override
protected void tearDown() throws Exception {
// required
super.tearDown();
}
/**
* @throws Exception
* if any
*/
public void testSomething() throws Exception {
final File pom = getTestFile(
"src/test/resources/unit/setup/pom.xml");
assertNotNull(pom);
assertTrue(pom.exists());
final SetupMojo setupMojo = (SetupMojo) lookupMojo("setup"
, pom);
assertNotNull(setupMojo);
setupMojo.execute();
}
}
-----------------------------------------------------------------------------
public class MyProjectStub extends MavenProjectStub {
/**
* Default constructor
*/
public MyProjectStub() {
final MavenXpp3Reader pomReader = new MavenXpp3Reader();
Model model;
try {
model = pomReader.read(ReaderFactory.newXmlReader(
new File(
getBasedir(),
"/unit/setup/pom.xml")));
setModel(model);
} catch (final Exception e) {
throw new RuntimeException(e);
}
setGroupId(model.getGroupId());
setArtifactId(model.getArtifactId());
setVersion(model.getVersion());
setName(model.getName());
setUrl(model.getUrl());
setPackaging(model.getPackaging());
final Build build = new Build();
build.setFinalName(model.getArtifactId());
build.setDirectory(getBasedir() + "/target");
build.setSourceDirectory(getBasedir() + "/src/main/java");
build.setOutputDirectory(getBasedir() + "/target/classes"
);
build.setTestSourceDirectory(getBasedir() +
"/src/test/java");
build.setTestOutputDirectory(getBasedir() +
"/target/test-classes");
setBuild(build);
final List<String> compileSourceRoots = new
ArrayList<String>();
compileSourceRoots.add(getBasedir() + "/src/main/java");
setCompileSourceRoots(compileSourceRoots);
final List<String> testCompileSourceRoots = new
ArrayList<String>();
testCompileSourceRoots.add(getBasedir() + "/src/test/java"
);
setTestCompileSourceRoots(testCompileSourceRoots);
}
/** {@inheritDoc} */
@Override
public List<ArtifactRepository> getRemoteArtifactRepositories() {
final ArtifactRepository repository = new
DefaultArtifactRepository("central", "http://repo.maven.apache.org/maven2"
,new DefaultRepositoryLayout());
return Collections.singletonList(repository);
}
/** {@inheritDoc} */
@Override
public File getBasedir() {
return new File(super.getBasedir() +
"/src/test/resources/");
}
}
------------------------------------------------------
src/test/resources/unit/setup/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.occ.maven</groupId>
<artifactId>test-setup</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Test SetupMojo</name>
<build>
<plugins>
<plugin>
<groupId>com.occ.maven</groupId>
<artifactId>oas</artifactId>
<version>1.0.0-SNAPSHOT</version>
<configuration>
<project implementation=
"com.occ.oas.maven.mojo.stubs.MyProjectStub"/>
<localRepository>
${localRepository}</localRepository>
</configuration>
</plugin>
</plugins>
</build>
</project>
Kind Regards,
Nathalie Keymeulen | Agfa HealthCare
Software Engineer | HE/Orbis Connectivity Core Team Ghent | IT BD,
Enterprise BU
T +32 3444 7644 | F +32 3 444 8401 | M +32 494 56 02 80
Moutstraat 100, B-9000 Ghent, Belgium
http://www.agfahealthcare.com
http://blog.agfahealthcare.com
Click on link to read important disclaimer:
http://www.agfahealthcare.com/maildisclaimer