5

私の目標は、JBoss7.1.1にearファイルをデプロイすることです。earファイルのクラスの1つ(変更できません)はsun.net.util.IPAddressUtil、JREのrt.jarのクラスを使用しています。

私のIDE(Eclipse)では、このクラスが解決され、正常にコンパイルされます。しかし、JBoss 7.1.1に(クラスを含むear)をデプロイしようとすると、が表示されますjava.lang.NoClassDefFoundError: sun/net/util/IPAddressUtilJAVA_HOME変数が私のマシンに設定されており、JBossとEclipseの両方が同じJDK(1.6.X)を使用していることがわかります

EARをrt.jarとlibフォルダーにバンドルすると、EARは正しくデプロイされます(これは悪いアプローチです)。

サードパーティのjarのモジュールとして設定するように指示されているJBossコミュニティを見てきました。ただし、必要なクラスはrt.jarにあり、モジュールとして追加することには賛成しません。

手動で確認するようにJBoss7.1.1を設定する方法はあります%JAVA_HOME%/jre/lib/rt.jarか?

前もって感謝します。

4

1 に答える 1

15

JBoss 7は、OSGiと同様に、モジュラークラスローディングにjboss-modulesテクノロジーを使用します。rt.jarと、独自のlibディレクトリにある一連のライブラリを使用して、アプリケーションサーバー自体を起動します。ただし、Webアプリケーションをロードすると、宣言するモジュールの依存関係に基づいて、表示されるクラスを制限するカスタムクラスローダーが作成されます。

モジュールの依存関係を宣言するには、EARのMETA-INFディレクトリ(またはWARの場合はWEB-INF)にjboss-deployment-structure.xmlを含める必要があります。https://docs.jboss.org/author/display/AS71/Class+Loading+in+AS7を参照してください。rt.jarのクラスへの依存関係を宣言するには、<system>依存関係が必要です。

<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.1">
    <deployment>
        <dependencies>
            <system export="true">
                <paths>
                    <path name="sun/net/util"/>
                </paths>
            </system>
        </dependencies>
    </deployment>
</jboss-deployment-structure>

IPAddressUtilクラスを抽出して、別のモジュールとしてパッケージ化することもできます。ソースはopenjdkから取得できます(例:http://www.docjar.com/html/api/sun/net/util/IPAddressUtil.java.html )。

于 2012-09-21T07:58:42.537 に答える