Wildfly 10中的ClassNotFoundException尽管设置了依赖关系

时间:2016-09-05 10:02:41

标签: java jboss wildfly wildfly-10

我在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>

还有一个名为&#34; org.apache.commons.io&#34;的模块。在jboss\modules\system\layers\base\org\apache\commons\io\main

我做错了什么? 这些东西在jboss\modules\system\layers而不是jboss\modules下的重要性是什么?

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

更新:
根据{{​​3}},我原本期望错误消息说[Module "deplyoment.MyApplication.ear.ps.jar: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()

2 个答案:

答案 0 :(得分:0)

在这种情况下,您需要手动加载类,我已在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>

答案 1 :(得分:0)

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