我正在使用Wildfly 11和Java 8.以前我正在构建一个WAR文件,它需要dom4j JAR文件 . 我没有将它包含在WAR的WEB-INF / lib目录中,而是通过在WEB-INF / jboss-deployment-structure.xml中添加一个条目来链接Wildfly模块JAR . 现在我想将此WAR打包为EAR的一部分 . 所以我使用这些行在EAR的根目录下创建了一个jboss-deploymebnt-structure.xml文件
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.2">
<deployment>
<sub-deployment name="myapp.war">
<dependencies>
...
<module name="org.dom4j" />
现在,当我部署EAR时,WAR无法部署错误,例如
service jboss.undertow.deployment.default-server.default-host./myapp: org.jboss.msc.service.StartException in service jboss.undertow.deployment.default-server.default-host./orgsclient: java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [META-INF/spring/infrastructure.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: org/dom4j/io/STAXEventReader
我需要做些什么来告诉EAR文件WAR使用Wildly模块dom4j而不是我用EAR包装的那个?
1 回答
检查
jboss-deploymebnt-structure.xml
是否正确放置在内置耳包的META-INF子文件夹(与application.xml一起)中 . 如果您正在使用maven ear插件,则应将xml文件放入:请注意
application
文件夹是ear插件的默认资源文件夹 .如果您仍然遇到NoClassDefFound问题,请尝试将依赖项重新声明为“ear global”并将其设置为已导出
如果仍有问题,则将模块声明为wildlfy配置中的全局模块(在ee子系统下) . 然后你可以完全摆脱jboss部署描述符 .