2014-10-11 2 views
3

У меня возникли проблемы с созданием теста JUnit с использованием зависимости pom.xml.Arquillian ShrinkWrap

Испытание бегутся с Arquillian

@RunWith(Arquillian.class)

В этом методе

@Deployment 
public static JavaArchive createDeployment() { 

Во-первых, я создаю JavaArchive с пакетом проекта я тестирую

JavaArchive merge = ShrinkWrap.create(JavaArchive.class). 
      addPackages(true, 
        "migrazioneGeaPersistenzaTampone", 
        "migrazioneGeaPersistenza", 
        "it.**.mistral.importGEA4.task", 
        "migrazioneGeaPersistenzaAccess" 
      ). 
      addClasses(java.sql.Connection.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml"); 

Затем, когда я запускаю тест, есть некоторые недостающие зависимости

Unable to resolve any beans for Types: [class it.**.**.be.service.EnvironmentRootService] 

присутствует в этой зависимости

 <dependency> 
     <groupId>it.**.mistral</groupId> 
     <artifactId>mistral-be</artifactId> 
     <version>0.1.0</version> 
     <scope>compile</scope> 
    </dependency> 

Я пробовал много разных вещи, чтобы добавить эту зависимость, лучше один, кажется, используя Shrinkwrap резольверов (https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc, particullarry этого пункта https://github.com/shrinkwrap/resolver/blob/master/README.asciidoc#resolution-of-artifacts-defined-in-pom-files)

)

JavaArchive[] archives = Maven.resolver().loadPomFromFile(path_to_pom_file). importDependencies(ScopeType.TEST,ScopeType.COMPILE). resolve().withTransitivity().as(JavaArchive.class);

или

Maven.resolver().loadPomFromFile("/path/to/pom.xml").importRuntimeDependencies() .resolve().withTransitivity().asFile();

Зависимость игнорируется в любом случае (я что-то не хватает?)

б)

JavaArchive[] mistral_be = Maven.configureResolver().workOffline(). resolve("it.**.mistral:mistral-be:0.1.0").withTransitivity().as(JavaArchive.class);
for (int i = 0; i < mistral_be.length ; i++) {
merge = merge.merge(mistral_be[i]);
}

С помощью простого

System.out.println(merge.toString(true)); 

я могу видеть, что все файлы из зависимостей присутствуют! В любом случае я использую локальный репозиторий workoffline() Возможно, мне не хватает некоторых зависимостей?

Но выход метод с

return merge; 

бросает «java.lang.NoClassDefFoundError: COM/Google/Protobuf/GeneratedMessage .... вызвано следующими причинами: java.lang.ClassNotFoundException: com.google. protobuf.GeneratedMessage "ошибка.

Затем снова я пытался добавить недостающие dependecies

// Tryn'g to add protobuf dependencies JavaArchive[] prto_buf = Maven.configureResolver().withMavenCentralRepo(true).resolve("com.google.protobuf:protobuf-java:2.3.0").withTransitivity().as(JavaArchive.class);

 for (int i = 0; i < prto_buf.length ; i++) { 
      projectPackages = projectPackages.merge(prto_buf[i]); 
     } 

Броски sameException ... Опять же, с простой

System.out.println(merge.toString(true)); 

Я могу видеть, что com.Google.protobuf.GeneratedMessage является настоящее время

Выписка из зависимых мест:

<dependency> 
     <groupId>org.jboss.spec</groupId> 
     <artifactId>jboss-javaee-6.0</artifactId> 
     <version>1.0.0.Final</version> 
     <type>pom</type> 
     <scope>provided</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-weld-ee-embedded-1.1</artifactId> 
     <version>1.0.0.CR3</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.jboss.shrinkwrap.resolver</groupId> 
     <artifactId>shrinkwrap-resolver-depchain</artifactId> 
     <version>2.1.0</version> 
     <scope>test</scope> 
    </dependency> 


</dependencies> 


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

Может ли кто-нибудь помочь мне решить эту проблему?

ответ

3

Это пахнет мне, как проблема с загрузкой. Особенно учитывая тот факт, что вы используете встроенный контейнер, который в основном берет все, что есть в вашем пути к классу проектов.

Каков целевой контейнер, на который вы развертываете приложение? Возможно, если вы попытаетесь запустить свой тест вместо встроенного контейнера, вы, по крайней мере, увидите, действительно ли это проблема, или что-то не так с вашим артефактом развертывания.

+0

Я пытаюсь установить в управляемый контейнер (Jboss 7.1.1), но теперь у меня есть новая проблема. В любом случае я принимаю ответ, потому что prblem был встроенным контейнером. Теперь я открою еще один поток для новой проблемы :) – Antimo

+0

Новый вопрос :) http://stackoverflow.com/questions/26453160/arquillian-shrinkwrap-maven-dependencies-in-pom – Antimo

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