Wildfly 模块类加载

Wildfly module classloading

我遇到了一个关于 wildfly 类加载的相当奇怪的问题。我有一个 java-ee webapp,结构如下:

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

war 和 jar 都需要 spring 类 才能正常运行。我定义了一个包含相关 类 的 spring 模块。在 jboss-deployment-structure 我有一个部分如下:

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

启动我的 webapp 后,我在部署 war-archive 时得到一个 ClassNotFoundException。 如果我添加一个额外的部分

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

有效。

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

任何人都可以阐明这个问题吗?

每个 sub-deployment 都需要它自己的一组模块依赖项。如果您要在 EAR/lib 目录中包含模块库而不是创建模块,那么您不需要为每个 sub-deployment.

添加模块依赖项