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 

Reply via email to