Как да добавя библиотека при внедряване на услугата arquillian?

в момента използвам Arquillian за jboss (дистанционно) и се опитвам да накарам Jmockit да работи. Разположих ухо, което работи добре, но получавам тази грешка за arquillian-service:

java.lang.NoClassDefFoundError: mockit/internal/state/TestRun

Caused by: java.lang.ClassNotFoundException: mockit.internal.state.TestRun from 
[Module "deployment.arquillian-service:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190)

Използвам jMockit 1.7 и го разполагам в EAR разгръщане.

Как мога да добавя библиотека в това внедряване (arquillian-service)

PS: Това внедряване се управлява от arquillian, нямам нищо общо с него.


person Adelina Dimachi    schedule 19.06.2015    source източник
comment
Имам малко опит с Arquillian, така че не знам отговора; но какви са тези тестове? дали са функционални тестове, използващи Selenium WebDriver или HTMLUnit, или просто интеграционни тестове за Java код, който се изпълнява в контейнер? И в двата случая наистина ли има нужда от подигравки в такива тестове?   -  person Rogério    schedule 19.06.2015
comment
Добавете кода за теста.   -  person Hardy    schedule 20.06.2015


Отговори (1)


Реших проблема с библиотеките на трети страни по следния начин - списъкът със зависимости:

protected static final String[] DEPENDENCIES = {
        ...,
        "xbean:xbean:2.4.0",
        ...
};

Метод, който ги опакова в отделен буркан:

protected JavaArchive thirdPartyLibs() {
    JavaArchive lib = ShrinkWrap.create(JavaArchive.class, "libs.jar");
    for (String dependency : DEPENDENCIES) {
        lib.merge(Maven.resolver().resolve(dependency).withoutTransitivity().asSingle(JavaArchive.class));
    }
    return lib;
}

В крайна сметка го сливам, когато опаковам основния буркан:

protected JavaArchive createJar() {
    return ShrinkWrap.create(JavaArchive.class, "test.jar")
            .addAsManifestResource("META-INF/test-persistence.xml", ArchivePaths.create("persistence.xml"))
            .addAsManifestResource("META-INF/test-beans.xml", ArchivePaths.create("beans.xml"))
            .....
            .merge(thirdPartyLibs());
}

Също така, за да използвате тази следваща зависимост, трябва да се посочат:

    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-bom</artifactId>
        <version>2.1.1</version>
        <scope>test</scope>
        <type>pom</type>
    </dependency>

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

    <dependency>
        <groupId>org.jboss.shrinkwrap.resolver</groupId>
        <artifactId>shrinkwrap-resolver-impl-maven-archive</artifactId>
        <scope>test</scope>
    </dependency>
person Vit Ias    schedule 25.06.2015
comment
Докато този механизъм работи по отношение на добавянето на библиотеките към jar файла, създаден от ShrinkWrap, в моя случай получавам проблеми с класове, използващи java анотации, т.е. java.lang.NoClassDefFoundError. Изглежда, че java не може да намери необходимите класове, въпреки че зависимостите са обединени правилно в генерирания буркан. Липсва ли нещо? - person narko; 15.09.2015
comment
Всъщност наблюдавам и някои изключения, свързани предимно с JavaDocs или нещо подобно. Те изглежда не са критични, тъй като не влияят на тестовете, просто правят регистрационните файлове по-малко красиви. Прекарах известно време в опити да ги поправя, но без успех. - person Vit Ias; 15.09.2015
comment
В моя случай съобщенията java.lang.NoClassDefFoundError изглеждат критични, тъй като Arquillian не може да разположи създадения военен файл. - person narko; 15.09.2015