尽管设置了依赖项,但 Wildfly 10 中的 ClassNotFoundException

ClassNotFoundException in Wildfly 10 despite dependency being set

我是 运行 WildFly 10 上的一个应用程序。它在一个 EAR 中包含许多 EJB。我有一个 EJB "gt" 通过 JMS 触发。该 EJB 调用另一个 EJB "ps",导致错误,最终

Caused by: java.lang.ClassNotFoundException: org.apache.commons.io.filefilter.IOFileFilter from [Module "deployment.MyApplication.ear:main" from Service Module Loader]

我的 jboss-deployment-structure.xml 包含这个

<sub-deployment name="ps.jar">
  <dependencies>
    <module name="org.apache.commons.io"/>
  </dependencies>
</sub-deployment>

并且 jboss\modules\system\layers\base\org\apache\commons\io\main

下有一个名为 "org.apache.commons.io" 的模块

我做错了什么? 东西在 jboss\modules\system\layers 之下而不是刚好在 jboss\modules 之下有什么意义?

有没有办法在运行时查看子部署的已配置依赖项,例如,通过 jboss-cli?

更新:
根据 https://docs.jboss.org/author/display/WFLY10/Class+Loading+in+WildFly,我本以为错误消息会显示 [Module "deplyoment.MyApplication.ear<b>.ps.jar</b>:main" ...],但事实并非如此。但是为什么上下文是全局部署,而不是具体的子部署呢?

逻辑调用堆栈如下所示:

general.GeneralSomeClass.getIOFileFilter()
    <-- static method. return type is IOFileFilter from Commons IO. 
        general is just a POJO lib (MyApplication.ear/lib/general.jar)
        the exception occurs on loading the GeneralSomeClass, before calling the method
ps.PsSomeClass.run()
ps.PsEJB.run()
gt.GtEJB.run()

在这种情况下,您需要手动加载 类,我已在 standalone.xml 中为我们的应用程序完成了此操作。

<subsystem xmlns="urn:jboss:domain:ee:4.0">
            <global-modules>
                <module name="com.tibco.tibjms"/>
                <module name="org.apache.logging.log4j.api"/>
                <module name="org.apache.logging.log4j.core"/>
                <module name="org.apache.logging.log4j.web"/>
            </global-modules>

我们最终使用了 Dependencies: MANIFEST.MF 中的选项,完全摆脱了 jboss-deployment-structure.xml。