Добавление всех зависимостей Maven к Arquillian - программирование
Подтвердить что ты не робот

Добавление всех зависимостей Maven к Arquillian

Как вы добавляете все зависимости в POM к arquillian?

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

Я нашел эту строку, но я Maven является красным в intellij, потому что он не находит класс. Я не знаю, какие зависимости мне нужны. Или есть лучшие способы?

4b9b3361

Ответ 1

Добавление аркильских зависимостей

Добавьте аркильские зависимости к вашему pom.xml:

<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>

Добавьте преобразование ShrinkWrap (реализация Maven) к вашему pom.xml:

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

Если вы используете JUnit, добавьте контейнер Arquillian JUnit в свой pom.xml:

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

Импорт зависимостей Maven

В вашем тестовом классе в рамках метода, аннотированного с помощью @Deployment, импортируйте зависимости времени выполнения со следующей строкой:

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

И добавьте зависимости для развертывания с помощью метода addAsLibraries(files):

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

Так будет выглядеть ваш тестовый класс, если вы используете JUnit

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
}

Примечание 1: Вышеупомянутое решение было протестировано с помощью Arquillian 1.1.8.Final. Проверьте последнюю версию аркиллианских артефактов в документации.

Примечание 2: Подробнее о том, как разрешать зависимости, см. Документация по разрешению ShrinkWrap Resolvers.суб >

Ответ 2

У меня была такая же ошибка, как и вы. Это из-за неправильной версии термоусадочной бумаги. См. Правильные версии во втором фрагменте кода.

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()) ;

    }
}

У меня было жесткое время, разрешающее зависимости maven. Ниже приведено рабочее решение, но я уверен, что его можно будет упростить.

<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>

Оригинальная идея отсюда: Как добавить артефакты Maven в мои архивы ShrinkWrap?

Ответ 3

Эта статья dzone Использование ShrinkWrap Maven Resolver для аркиллианских тестов, которая может быть полезна. Это предполагает:

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

Другой способ найти класс, когда вы не знаете, какой артефакт он должен использовать search.maven.org. Здесь поиск нужного вам класса:

Здесь показаны артефакты, содержащие этот класс. Тем не менее, класс находится в банке API, и вам также понадобится реализация jar, как указано выше, и в вышеупомянутой статье.

Ответ 4

Класс org.jboss.shrinkwrap.resolver.api.maven.Maven включен с помощью shrinkwrap-resolver-impl-maven 2.0.0-beta-1 или новее.