【问题标题】:How to add classes from another to the Arquillian deployment archive?如何将另一个类添加到 Arquillian 部署存档?
【发布时间】:2017-10-01 21:15:42
【问题描述】:

我开始使用 Arquillian 并按照教程进行操作。它涵盖了如何将 EJB 注入测试用例。由于 Arquillian 的目标是 Java Web 和 EE 项目,我很惊讶本教程没有涉及实体类和 EJB 接口的分离,因为至少 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,其中实体和接口不包含在测试的 .war 中,而是作为 .war 的父 .ear 存档中的兄弟姐妹?

我可以考虑从 Maven 缓存中添加带有硬编码路径的 JAR,但这不可能,不是吗?

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

【问题讨论】:

  • EE projects where everything is dumped in one project are rare 为什么会这样?至少对于 jboss7 和 wildfly,您不再需要使用 EAR。
  • 也许我错过了最近的 Java EE 开发,但是包含单独的 WAR 和 JAR 存档的 afaik EAR 在世界上有它们的合法地位。 Arquillian 能否很好地处理它们?如何处理?

标签: java maven jakarta-ee jboss-arquillian


【解决方案1】:

可以像这样构建带有库的 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;
}

【讨论】:

  • 谢谢。 1. 这是指哪个版本的 Arquillian 和 Shrinkwrap? MavenDependencyResolver 似乎是 ShrinkWrap 解析器 1.x 的一部分。 2.这意味着我必须在两个位置管理依赖项的版本,对吗?这将非常容易出错,让我怀疑 Arquillian 的可用性和炒作。
  • 说实话已经有一段时间了。我看到 ShrinkWrap Resolvers 有更新版本的 API 不同的 API
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 2011-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-26
相关资源
最近更新 更多