Как добавить библиотеку в развертывание службы 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 не может найти нужные классы, хотя зависимости в сгенерированном jar-файле объединены правильно. Чего-то не хватает? - person narko; 15.09.2015
comment
На самом деле я также наблюдаю некоторые исключения, в основном связанные с JavaDocs или чем-то подобным. Вроде бы они не критичны, т.к. не влияют на тесты, просто делают логи менее красивыми. Я потратил некоторое время, пытаясь исправить их, но безуспешно. - person Vit Ias; 15.09.2015
comment
В моем случае сообщения java.lang.NoClassDefFoundError кажутся критическими, поскольку Arquillian не может развернуть созданный файл войны. - person narko; 15.09.2015