1

我有一个 EAR,其中包含一个 WAR 和一个 EJB(jar)。EJB 和 WAR 共享一些库,所以我想使用maven-ear-plugin.

我的 ear pom 配置了共享库作为依赖项,并将<skinnyWars>选项设置为 true。

我看到我的 EAR 已正确构建;公共库从我的 WAR 中提取并放置在 EAR 中。

我的问题是,当我在 Websphere 8.5 上启动 EAR 时,WAR 无法找到保留在 WAR/WEB-INF/lib 文件夹中的类。

我检查了 war/META-INF/ 中的 MANIFEST.MF 并看到列出了所有库(war/web-inf/lib 文件夹中的那些以及公共库),但是ClassNotFoundException每当我得到尝试从 WEB-INF/lib/xxx.jar 中访问类。

(来自 pom.xml 的片段)

<dependencies>
    <dependency>
        <groupId>com.webinfo</groupId>
        <artifactId>WebInfoWebApp</artifactId>
        <version>${project.version}</version>
        <type>war</type>
    </dependency>

    <dependency>
        <groupId>com.webinfo</groupId>
        <artifactId>WebInfoEJB</artifactId>
        <version>${project.version}</version>
        <type>ejb</type>
    </dependency>


    <!-- In order to make skinnyWars, need to list all the common dependencies of the EAR here -->
    <!-- Use the ejb pom to list all the ejb dependencies here automatically -->
    <dependency>
        <groupId>com.webinfo</groupId>
        <artifactId>WebInfoEJB</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
    </dependency>
</dependencies>

<build>
    <plugins>
        <!-- EAR plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <version>2.10</version>
            <configuration>
                <defaultLibBundleDir>/</defaultLibBundleDir>
                <skinnyWars>true</skinnyWars>
                <archive>
                    <manifestFile>META-INF/MANIFEST.MF</manifestFile>
                    <manifest>
                        <addClasspath>true</addClasspath>
                    </manifest>
                </archive>

                <modules>

                    <webModule>
                        <groupId>com.webinfo</groupId>
                        <artifactId>WebInfoWebApp</artifactId>
                        <bundleFileName>WebInfoWeb.war</bundleFileName>
                    </webModule>

                    <ejbModule>
                        <groupId>com.webinfo</groupId>
                        <artifactId>WebInfoEJB</artifactId>
                        <bundleFileName>WebInfoEJB.jar</bundleFileName>
                    </ejbModule>
                </modules>

            </configuration>
        </plugin>
    </plugins>
</build>

EAR清单.mf:

Class-Path: WebInfoWeb.war WebInfoEJB.jar core_business-5.1.0.jar core
 _common-5.1.0.jar core-5.1.0.jar ICS_SSEClient-3.5.15.jar com.ibm.uti
 l.ini-1.0.jar ICS_SecuredUserContext-3.5.15.jar ICS_SecuredUserContex
 tClient-3.5.15.jar ICS_ManageClient-3.5.15.jar ICS_ConfigurationClien
 t-3.5.15.jar ICS_Common-3.5.15.jar

WAR清单.mf:

Class-Path: WebInfoJava-3.9.0-SNAPSHOT.jar com.ibm.util.ini-1.0.jar ow
 asp-esapi-full-java-1.4.jar regexp-1.2.jar com.ibm.regex.REUtil-1.3.0
 .jar ojdbc6-11.2.0.3.0.jar AdobeFDF-1.0.jar core_business-5.1.0.jar c
 ore_common-5.1.0.jar core-5.1.0.jar ICS_SSEClient-3.5.15.jar ICS_Secu
 redUserContext-3.5.15.jar ICS_SecuredUserContextClient-3.5.15.jar ICS
 _ManageClient-3.5.15.jar ICS_ConfigurationClient-3.5.15.jar ICS_Commo
 n-3.5.15.jar

例外:

java.lang.ClassNotFoundException: com.calculator.sendmail.SendMailCommunicationBusinessFactory

SendMailCommunicationBusinessFactory位于WebInfoJava-3.9.0-SNAPSHOT.jarwar/WEB-INF/lib文件夹中。

我在设置/配置类路径的方式上做错了什么吗?

4

0 回答 0