2015-06-19 2 views
0

В настоящее время я использую Arquillian для jboss (remote), и я пытаюсь заставить Jmockit работать. Я развернула ухо, которое работает отлично, но я получаю эту ошибку для arquillian-службы:Как добавить библиотеку в развертывание сервисов arquillian?

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-сервис)

PS: Это развертывание управляется arquillian, я не имею ничего общего с ним.

+0

У меня мало опыта с Аркиллиан, поэтому я не знаю ответа; но что это за тесты? являются ли они функциональными тестами с использованием Selenium WebDriver или HTMLUnit или просто интеграционными тестами для Java-кода, которые запускаются в контейнере? В любом случае, действительно ли нужно издеваться над такими испытаниями? –

+0

Добавьте код для теста. – Hardy

ответ

1

Я решил проблему сторонних LIBS следующим образом - список зависимостей:

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

Хотя этот mecanism работает с точки зрения добавления библиотек в файл jar, созданный ShrinkWrap, в моем случае я получаю проблемы с классами с использованием аннотаций java, то есть java.lang.NoClassDefFoundError. Кажется, что java не может найти требуемые классы, даже если зависимости сгенерированы правильно в сгенерированной банке. Что-то не хватает? – narko

+0

На самом деле я также наблюдаю некоторые исключения, в основном связанные с JavaDocs или что-то в этом роде. Они, похоже, не критичны, так как не влияют на тесты, просто делайте журналы менее красивыми. Я потратил некоторое время, пытаясь исправить их, но не успел. –

+0

В моем случае сообщения java.lang.NoClassDefFoundError кажутся критическими, поскольку Аркиллиан не может развернуть созданный файл войны. – narko

Смежные вопросы