首页 文章

在部署EAR时,如何告诉Wildfly我想使用Wildfly模块?

提问于
浏览
0

我正在使用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 回答

  • 0

    检查 jboss-deploymebnt-structure.xml 是否正确放置在内置耳包的META-INF子文件夹(与application.xml一起)中 . 如果您正在使用maven ear插件,则应将xml文件放入:

    ear/src/main/application/META-INF/jboss-deploymebnt-structure.xml
    

    请注意 application 文件夹是ear插件的默认资源文件夹 .

    如果您仍然遇到NoClassDefFound问题,请尝试将依赖项重新声明为“ear global”并将其设置为已导出

    <?xml version="1.0" encoding="UTF-8"?>
    <jboss-deployment-structure>
        <deployment>
            <dependencies>
                <module name="org.dom4j" slot="main" export="true"/>
            </dependencies>
        </deployment>
    </jboss-deployment-structure>
    

    如果仍有问题,则将模块声明为wildlfy配置中的全局模块(在ee子系统下) . 然后你可以完全摆脱jboss部署描述符 .

    <subsystem xmlns="urn:jboss:domain:ee:4.0">
            <global-modules>
                <module name="org.dom4j">
            </global-modules>
            ...
    

相关问题