1

WAR と EJB (jar) を含む EAR があります。EJB と WAR はいくつかのライブラリを共有しているので、maven-ear-plugin.

依存関係として共有ライブラリを使用して ear pom を構成し、<skinnyWars>オプションを true に設定しています。

EAR が適切に構築されていることがわかります。共通ライブラリは WAR から抽出され、EAR に配置されます。

私の問題は、Websphere 8.5 で EAR を起動したときに、WAR/WEB-INF/lib フォルダーに残っているクラスを WAR が見つけられないことです。

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 manifest.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

しかしSendMailCommunicationBusinessFactoryWebInfoJava-3.9.0-SNAPSHOT.jarそれは war/WEB-INF/lib フォルダーにあります。

クラスパスのセットアップ/構成方法で何か間違ったことをしていますか?

4

0 に答える 0