我有两个 EAR(ear01-0.0.1-SNAPSHOT.ear、ear02-0.0.1-SNAPSHOT.ear)应用程序,它们都使用一个公共库(common-0.0.1-SNAPSHOT.jar)。我决定移出该通用部分并将其作为模块添加到Wildfly 14,但即使使用部署描述符,我在 EAR 部署期间也会遇到异常:
java.lang.NoClassDefFoundError: Failed to link ki/wildfly_deps/ejbs01/EchoBean01
我使用此 CLI 添加新模块:
module add --name=ki.wildfly_deps.common --resources=common-0.0.1-SNAPSHOT.jar
JAR 现在在
$JBOSS_HOME/modules/ki/wildfly_deps/common/main
1. 问题
这个 JAR 不应该在文件夹中
$JBOSS_HOME/modules/system/layers/base/ki/wildfly_deps/common/main
除了其他模块?
添加模块后,module.xml如下所示:
<?xml version='1.0' encoding='UTF-8'?>
<module xmlns="urn:jboss:module:1.1" name="ki.wildfly_deps.common">
<resources>
<resource-root path="common-0.0.1-SNAPSHOT.jar"/>
</resources>
</module>
每个 EAR 中的jboss-deployment-structure.xml声明了对上述公共库的依赖:
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<dependencies>
<module name="ki.wildfly_deps.common" />
</dependencies>
</deployment>
2. 问题
我应该指定必须从公共模块导入的包吗?
<jboss-deployment-structure
xmlns="urn:jboss:deployment-structure:1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<dependencies>
<module name="ki.wildfly_deps.common" //>
<imports>
<include path="META-INF**" />
<include path="ki.wildfly_deps.common**" />
</imports>
</module>
</dependencies>
</deployment>