【问题标题】:Create ear test with Arquillian using Maven resolver使用 Maven 解析器使用 Arquillian 创建耳朵测试
【发布时间】:2016-10-10 12:45:12
【问题描述】:

我需要使用 Arquillian 为我的 EAR 应用程序创建一个真实的 IT 测试。

由于 ShrinkWrap 方法 addClassesaddPackages 在现实世界中无用 - 因为需要太多导入 - 我想使用 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 依赖项”时创建存档失败并抛出此错误

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

有人成功创建了存档吗?

【问题讨论】:

  • 用WAR代替EAR也试过了,结果一样! “java.lang.IllegalArgumentException:没有为解析设置依赖项”
  • 在答案部分写下你的答案,而不是在内部问题中获得赏金。这也是问答清晰的正确方法。

标签: java maven jboss-arquillian shrinkwrap


【解决方案1】:

我终于用下面的代码解决了:

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 使用上述属性创建了可以分析以消除错误的结果包。

【讨论】:

  • 你的 maven repo 在代理后面吗?我在 Maven.resolver().loadPomFromFile("pom.xml").importRuntimeDependencies().resolve() 有相同的 IllegalArgumentException(没有为解析设置依赖项)...你遇到过类似的事情吗?
  • 不,我不支持代理
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-19
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-02
相关资源
最近更新 更多