【问题标题】:Ear Deployment in Jboss AS 7 failure with ClassNotFoundExceptionJboss AS 7 中的 Ear 部署失败并出现 ClassNotFoundException
【发布时间】:2018-10-19 13:09:24
【问题描述】:

我正在将现有项目迁移到 AS7。我的耳朵结构如下,请各位大神帮忙看看结构是否正确。因为我在部署时收到 ClassNotFoundException,所以我认为我将 jar 放在了错误的位置。

Ear
  webmodule.war
  Ejbmodule.jar

当我提取耳朵时。

META_INF
       |-> maven
                |-> com.myapp.mss
                |-> ear
                    pom.properties
                    pom.xml
       application.xml
       Manifest.mf
one.jar
two.jar
three.jar
My-ejb-module.jar
My-web-module.war

JBoss EAP 7 是否需要 lib 文件夹?

我正在使用 maven 进行构建。

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <version>2.2.1</version>
            <configuration>
                <ejbVersion>3.0</ejbVersion>
                <generateClient>false</generateClient>
                <jarName>myappejb-${env}-${pom.version}</jarName>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>
                <finalName>myapp-${env}-${pom.version}</finalName>
                <modules>
                    <webModule>
                        <groupId>com.myapp.mss</groupId>
                        <artifactId>webModule</artifactId>
                        <contextRoot>/myapp</contextRoot>
                        <bundleFileName>mssweb-${env}-${pom.version}.war</bundleFileName>
                    </webModule>
                </modules>
            </configuration>
        </plugin>

【问题讨论】:

    标签: java maven jboss7.x maven-plugin maven-ear-plugin


    【解决方案1】:

    可部署文件放置在 EAR 的根目录中。依赖项 JAR 应该放在 EAR 的 lib 目录中。您可以使用 EAR 部署描述符中的 library-directory 标记,使用自定义值覆盖 lib 目录。

    XSD 中 library-directory 标记的文档:

    library-directory 元素指定路径名 应用程序包中的目录,相对的 到应用程序包的顶层。所有文件 此目录中名为“*.jar”的文件必须可用 在此包含的所有组件的类路径中 应用程序包。如果未指定此元素, 搜索名为“lib”的目录。一个空元素 可用于禁用搜索。

    【讨论】:

    • 我是否可以在根目录中保留可部署文件以及依赖 jar。可能吗?对我来说,ClassNotFoundException 出现在我的可部署 jar 中,而不是依赖 jar 中
    • 您应该可以使用上面提到的 library-directory 元素。但问题是……为什么?这将减慢部署速度,因为必须扫描所有 JAR 以查找注释。我建议您使用默认的 EAR 结构,直到您有充分的理由采取不同的做法。
    猜你喜欢
    • 2012-02-27
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多