Wildfly模块类加载

问题描述

我在使用wildfly类加载时遇到了一个非常奇怪的问题。我有一个Java-ee webapp,结构如下:

some.ear
+- some.war
+- EJBs.jar

战争和罐子都需要一些弹簧类才能正常运行。我定义了一个包含相关类的spring模块。在jboss-deployment-structure中,我有一个部分如下:

<jboss-deployment-structure>
<deployment>
    <dependencies>
        ...
        <module name="org.springframework.spring-web"/>
        ...
    </dependencies>
</deployment>

启动我的Web应用程序后,在部署战争存档时会收到ClassNotFoundException。 如果我添加其他部分

<sub-deployment name="some.war">
    <dependencies>
        ...
        <module name="org.springframework.spring-web"/>
        ...
    </dependencies>
</sub-deployment>

有效。

我的理解是,主部署部分中的每个模块在所有子部署中也应该可见。

有人可以阐明这个问题吗?

解决方法

每个子部署都需要它自己的一组模块依赖项。如果要在EAR/lib目录中包含模块库而不是创建模块,则不需要为每个子部署添加模块依赖项。