2016-10-10 2 views
4

Мне нужно создать настоящий ИТ-тест, используя Arquillian для моего приложения EAR.Создайте тест на ухо с аркиллианским использованием Maven resolver

Поскольку методы Shrinkwrap addClasses или addPackages бесполезны в реальном мире - из-за слишком большого количества импорта необходимых - Я хотел бы использовать Maven.resolver(), который работает с pom.xml.

Поэтому я создал тест, как это:

@RunWith(Arquillian.class) 
public class ArqTest { 

@Deployment 
public static Archive<?> createTestArchive() { 
    System.out.println("START CREATE ARCHIVE"); 

    //create ear archive 
    EnterpriseArchive ear = ShrinkWrap 
      .create(EnterpriseArchive.class); 

    System.out.println("RESOLVING EJB DEPENDENCIES"); 

    // resolve and add ejbDependencies to ear lib 
    File[] ejbDependencies = Maven.resolver() 
      .loadPomFromFile("../ejb/pom.xml") 
      .importRuntimeDependencies() 
      .resolve() 
      .withTransitivity() 
      .asFile(); 

    System.out.println("ADDING DEPENDENCIES TO EAR"); 

    for (File archive : ejbDependencies) { 
     ear.addAsLibrary(archive); 
    } 

    System.out.println("START CREATE EJB"); 
    // resolve ejb (actually jar file cause as of now mavenimporter doesn't support ejb-types ony war and jars so don't be fooled by my naming convention) 
    // then add some external resources, and an empty beans.xml for CDI to work 
    JavaArchive ejb = ShrinkWrap     
      .create(MavenImporter.class)     
      .loadPomFromFile("../ejb/pom.xml") 
      .importBuildOutput()     
      .as(JavaArchive.class) 
      .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") 
      .addAsResource("app.properties") 
      ; 

    System.out.println("START CREATE WAR"); 
    //resolve war and add beans.xml and my html files manually 
    WebArchive war = ShrinkWrap 
      .create(MavenImporter.class) 
      .loadPomFromFile("pom.xml") 
      .importBuildOutput() 
      .as(WebArchive.class)    
      .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") 
      ; 

    //add built modules to ear and my application.xml 
    ear.addAsModule(ejb); 
    ear.addAsModule(war); 
    ear.setApplicationXML("application.xml"); 

    System.out.println("END CREATE ARCHIVE"); 

    return ear; 
} 

Тем не менее, не удается создать архив в то время как «РАЗРЕШЕНИЯ EJB DEPENDENCIES» и бросить эту ошибку

Caused by: java.lang.IllegalArgumentException: No dependencies were set for resolution 
at org.jboss.shrinkwrap.resolver.impl.maven.util.Validate.notEmpty(Validate.java:78) 
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.using(MavenStrategyStageBaseImpl.java:65) 
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withTransitivity(MavenStrategyStageBaseImpl.java:49) 
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withTransitivity(MavenStrategyStageBaseImpl.java:38) 
at ArqEjbTest.createTestArchive(ArqEjbTest.java:39) 
... 61 more 

Любой имел успех с созданием архив?

+0

Пробовал также WAR, а не EAR, имел те же результаты! «java.lang.IllegalArgumentException: не было установлено никаких зависимостей для разрешения». – oikonomopo

+0

напишите свой ответ в разделе «Ответ», а не внутри вопроса, чтобы получить награду. Это также правильный способ быть Q & A ясным. – oikonomopo

ответ

2

я, наконец, решается с помощью следующего кода:

System.out.println("RESOLVING EJB DEPENDENCIES"); 

// resolve and add ejbDependencies to ear lib 
File[] ejbDependencies = Maven.resolver() 
    .loadPomFromFile("../project-ejb/pom.xml") 
    .importRuntimeDependencies() 
    .resolve() 
    .withTransitivity() 
    .asFile(); 

for (File archive : ejbDependencies) { 
    ear.addAsLibrary(archive); 
} 

System.out.println("START CREATE EJB"); 
// resolve ejb (actually jar file cause as of now mavenimporter doesn't support ejb-types ony war and jars so don't be fooled by my naming convention) 
// then add some external resources, and an empty beans.xml for CDI to work 
JavaArchive ejb = ShrinkWrap 
    .create(JavaArchive.class, "project-test-ejb.jar")    
    .addPackage("it.blah..")     
    .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml") 
    ; 

Остальное остается тем же самым.

Добавление этой строки в arquillian.xml

<engine> 
    <property name="deploymentExportPath">target/deployment</property> 
</engine> 

также помогает много, потому что с выше arquillian собственности создает пакет результата, который может быть проанализирован, чтобы избавиться от ошибок.

+0

Является ли ваш maven репо за прокси? У меня такое же IllegalArgumentException (никаких зависимостей не было установлено для разрешения) в Maven.resolver(). LoadPomFromFile ("pom.xml"). ImportRuntimeDependencies(). Resolve() ... С чем вы столкнулись? – oikonomopo

+0

Нет, я не за прокси –

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