webentwicklung-frage-antwort-db.com.de

Hinzufügen aller Maven-Abhängigkeiten zu Arquillian

Wie fügen Sie alle Abhängigkeiten im POM zu arquillian hinzu?

Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies()
                .as(File.class);

Ich habe diese Zeile gefunden, aber ich Maven ist in intellij rot, weil sie die Klasse nicht findet. Ich weiß nicht, welche Abhängigkeiten ich brauche. Oder gibt es bessere Wege?

21
LuckyLuke

Hinzufügen von Arquillian-Abhängigkeiten

Fügen Sie Arquillian-Abhängigkeiten zu Ihrem pom.xml hinzu:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.1.8.Final</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
    </dependencies>
</dependencyManagement>

Fügen Sie den ShrinkWrap-Resolver (Maven-Implementierung) zu Ihrem pom.xml hinzu:

<dependency>
    <groupId>org.jboss.shrinkwrap.resolver</groupId>
    <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
    <scope>test</scope>
</dependency>

Wenn Sie JUnit verwenden, fügen Sie den Arquillian JUnit-Container zu Ihrem pom.xml hinzu:

<dependency>
    <groupId>org.jboss.arquillian.junit</groupId>
    <artifactId>arquillian-junit-container</artifactId>
    <scope>test</scope>
</dependency>

Maven-Abhängigkeiten importieren

Importieren Sie in Ihrer Testklasse innerhalb der mit @Deployment annotierten Methode die Laufzeitabhängigkeiten mit der folgenden Zeile:

File[] files = Maven.resolver().loadPomFromFile("pom.xml")
        .importRuntimeDependencies().resolve().withTransitivity().asFile();

Fügen Sie die Abhängigkeiten mit der Methode addAsLibraries(files) zu Ihrer Implementierung hinzu:

WebArchive war = ShrinkWrap.create(WebArchive.class)
                           .addClass(MyClass1.class)
                           .addClass(MyClass2.class)
                           .addClass(MyClass3.class)
                           .addAsLibraries(files);

So wird Ihre Testklasse aussehen, wenn Sie JUnit verwenden

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
import Java.io.File;

@RunWith(Arquillian.class)
public class MyTestClassWithMavenDependencies {

    @Deployment
    public static WebArchive createDeployment() {

        // Import Maven runtime dependencies
        File[] files = Maven.resolver()
                            .loadPomFromFile("pom.xml")
                            .importRuntimeDependencies()
                            .resolve()
                            .withTransitivity()
                            .asFile();

        // Create deploy file    
        WebArchive war = ShrinkWrap.create(WebArchive.class)
                                   .addClass(MyClass1.class)
                                   .addClass(MyClass2.class)
                                   .addClass(MyClass3.class)
                                   .addAsLibraries(files);

        // Show the deploy structure
        System.out.println(war.toString(true)); 

        return war;
    }

    // Create your tests here
}

Hinweis 1: Die obige Lösung wurde mit Arquillian 1.1.8.Final getestet. Überprüfen Sie die neueste Version von Arquillian-Artefakten in der Dokumentation .

Note 2: Weitere Informationen zum Auflösen von Abhängigkeiten finden Sie in der ShrinkWrap Resolver-Dokumentation .

30
cassiomolin

Ich hatte den gleichen Fehler wie du. Dies liegt an falschen Wrinkwrap-Versionen. Die richtigen Versionen finden Sie im zweiten Teil des Codes.

package alehro.testgf2;

import Java.io.File;

import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

import alehro.p1.C1;
import alehro.p1.C2;

@RunWith(Arquillian.class)
public class Test1 {

    @Deployment
    public static Archive<?> createTestArchive()  {
         File[] libs = Maven.resolver().loadPomFromFile("pom.xml").importRuntimeAndTestDependencies().asFile();


        WebArchive res = ShrinkWrap.create(WebArchive.class, "test.war");
        for(File file : libs){
            res.addAsLibrary(file);
        }       
        res.addPackages(true, "alehro.p1");

        return res;          

    }
    @Test
    public void test1(){
            //third party lib
        DateTimeFormatter inputDF = DateTimeFormat.forPattern("d MMM yyyy HH:mm:ss Z");
        DateTime dt1 = inputDF.parseDateTime("28 Nov 2012 23:23:23 +04");           
        Assert.assertNotNull(dt1);  

            //all classes from alehro.p1
        Assert.assertEquals("Failure", "I'm C1", C1.getMyName()) ;
        Assert.assertEquals("Failure", "I'm C2", C2.getMyName()) ;

    }
}

Ich hatte eine harte Zeit, um Abhängigkeiten von Maven aufzulösen. Unten ist die funktionierende Lösung, aber ich bin sicher, dass sie sich weiter vereinfachen lässt. 

<dependencies>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.1</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.junit</groupId>
        <artifactId>arquillian-junit-container</artifactId>
        <scope>test</scope>

    </dependency>
    <dependency>
        <groupId>org.jboss.arquillian.container</groupId>
        <artifactId>arquillian-glassfish-remote-3.1</artifactId>
        <scope>test</scope>
        <version>1.0.0.CR3</version>
    </dependency>

    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api</artifactId>
        <version>2.0.0-alpha-5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
        <version>2.0.0-alpha-5</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-api-maven</artifactId>
        <version>2.0.0-alpha-5</version>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.jboss.shrinkwrap.resolver</groupId>
            <artifactId>shrinkwrap-resolver-bom</artifactId>
            <version>2.0.0-alpha-5</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>
        <dependency>
            <groupId>org.jboss.arquillian</groupId>
            <artifactId>arquillian-bom</artifactId>
            <version>1.0.3.Final</version>
            <scope>import</scope>
            <type>pom</type>
        </dependency>


    </dependencies>
</dependencyManagement>

Ursprüngliche Idee ist von hier: Wie füge ich Maven-Artefakte meinem ShrinkWrap-Archiv hinzu?

8
alehro

Dieser dzone-Artikel Verwenden des ShrinkWrap-Maven-Resolvers für Arquillian-Tests das könnte nützlich sein. Es schlägt vor:

<dependency>
  <groupId>org.jboss.shrinkwrap.resolver</groupId>
  <artifactId>shrinkwrap-resolver-impl-maven</artifactId>
</dependency>

Eine andere Möglichkeit, eine Klasse zu finden, wenn Sie nicht wissen, in welchem ​​Artefakt sie sich befindet, ist die Verwendung von search.maven.org . Hier ist eine Suche nach der gewünschten Klasse:

Es zeigt die Artefakte, die diese Klasse enthalten. Die Klasse befindet sich jedoch in einem API-Jar, und Sie möchten auch den Implementierungs-Jar wie oben und im oben genannten Artikel.

6
Martin Ellis

Die Klasse org.jboss.shrinkwrap.resolver.api.maven.Maven wird von shrinkwrap-resolver-impl-maven 2.0.0-beta-1 oder höher eingeschlossen.

0
Sam