JBoss EAP 6 在 APP-INF/lib 中找不到 JAR

JBoss EAP 6 cannot find JARs in APP-INF/lib

我正在从 Weblogic 迁移到 JBoss EAP 6.4,但我在部署和启动 JBoss 服务器时遇到问题。

我的EAR结构如下:

.EAR
|
|---APP-INF
|      |---lib
|           |---[many .jar files]
|
|---META-INF
|       |---application.xml
|       |---jboss-deployment-structure.xml
|
|---[EJB JAR files]

问题:

EAR 根目录中的 EJB JAR 无法访问 APP-INF/lib 文件夹中 JAR 中的 类。

我手动将 lib 文件夹放在 EAR 的根目录下,而不是放在 APP-INF 文件夹中,这似乎可以解决问题。

JBoss 正在查看 .EAR/lib 而不是 .EAR/APP-INF/lib

然后,我在 pom.xmlmaven-ear-plugin 部分添加了以下内容,让 Maven 在根目录而不是 APP-INF 中创建 lib 文件夹:

<plugin>
    <artifactId>maven-ear-plugin</artifactId>
    <version>2.9.1</version>
    <configuration>
        <defaultLibBundleDir>lib</defaultLibBundleDir>
        <goals>
            <goal>generate-application-xml</goal>
            <initializeInOrder>true</initializeInOrder>
        </goals>
    </configuration>
</plugin>

APP-INF/lib 位置特定于 WebLogic。有两种解决方案:

  • 使 Maven 根据标准构建应用程序 - /lib。这就是您在回答中所做的。

  • 从 Java EE 5 开始,您可以在 META-INF/application.xml 文件中包含库目录参数:

    <application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
       <module>
          <ejb>hello-ejb.jar</ejb>
       </module>
       <module>
          <web>
         <web-uri>myapp.war</web-uri>
         <context-root>myapp</context-root>
          </web>
       </module>
       <library-directory>APP-INF/lib</library-directory>
    </application>
    

作为替代方案,您可以在 jboss-app.xml:

中包含相同的参数
    <application>
      <display-name>My Application</display-name>
      <module>
        <web>
          <web-uri>myapp.war</web-uri>
          <context-root>/myapp</context-root>
        </web>
      </module>

      <module>
        <ejb>myapp.jar</ejb>
      </module>

      <library-directory>APP-INF/lib</library-directory>

    </application>