java - 如何将其他类添加到 Arquillian 部署存档中?

标签 java maven jakarta-ee jboss-arquillian

我正在开始使用 Arquillian 并按照教程进行操作。它涵盖了如何将 EJB 注入(inject)到测试用例中。由于 Arquillian 的目标是 Java Web 和 EE 项目,因此我非常惊讶本教程中没有介绍实体类和 EJB 接口(interface)的分离,因为至少将所有内容都转储到一个项目中的 EE 项目很少见。

由于教程中没有涵盖,并且任何 EE 容器都没有可以理解的错误消息,因此我设法通过反复试验提取了一个测试用例,该用例显示了中使用的类

@Deployment
public static JavaArchive createDeployment() {
    return ShrinkWrap.create(JavaArchive.class)
        .addClasses(MyXBean.class, DefaultMyXBean.class, TermsOfUse.class)
        .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}

它们位于类路径上,但不在包含测试的同一个 Maven 项目中,由于 NoClassDefFoundError 而失败。将类移动到项目中而不触及任何其他内容即可使部署工作。

有没有办法在“真正的”Java EE 中使用 Arquillian,其中实体和接口(interface)不包含在测试的 .war 中,而是作为父级 中的同级.war 的 .ear 存档?

我可以考虑使用硬编码路径从 Maven 缓存添加 JAR,但不可能是这样,不是吗?

How test in Java ee using Arquillian maven multiple project可能是同一个问题。

最佳答案

带有库的 EAR 部署可以这样构建:

@Deployment
public static Archive<?> createDeploymentPackage() throws IOException {
    MavenDependencyResolver resolver = DependencyResolvers  
         .use(MavenDependencyResolver.class)  
         .loadMetadataFromPom("test1-pom.xml");  

    final JavaArchive ejbJar = ShrinkWrap.create(JavaArchive.class, "my-ejbs.jar").addClass(SomeEjb.class);

    final WebArchive webApp = ShrinkWrap.create(WebArchive.class, "my-webap.war").addClass(MyServlet.class);
    final EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class)
            .setApplicationXML("application.xml")
            .addAsLibraries(resolver.artifact("log4j:log4j:1.2.17").resolveAsFiles()) 
            .addAsModule(ejbJar)
            .addAsModule(webApp);
    return ear;
}

关于java - 如何将其他类添加到 Arquillian 部署存档中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46516965/

相关文章:

java - 如何在Range Seekbar中设置进度间隔

android - Gradle 和 Android 支持库

java - 如何根据年中的某天获取月份

java - 如何在JSP中的DisplayTag中实现GO TO页码功能

Java EE 请求范围和异步

java - 如何从用 Java 编写的 AWS Lambda 返回二进制数据

java - 用大公报训练斯坦福 NER,内存问题

java - 尝试使用 Volley 单例时出现 NullPointerException

java - IntelliJ 检查给出 "Cannot resolve symbol"但仍编译代码

maven - 我可以在 Groovy 变量名中包含奇数字符吗?