0

Tomcat および Websphere サーバー上の Web アプリケーションから使用されるライブラリーの jarNames を取得する必要があります。

私はこのコードを持っています:

public void libs(ActionEvent e){

    System.getProperty("java.class.path");

    try {
            Field ucp = this.getClass().getClassLoader().getClass()
                        .getSuperclass().getDeclaredField("ucp");

            ucp.setAccessible(true);

            Object valueUcp = ucp.get(this.getClass().getClassLoader());

            Field loaders = valueUcp.getClass().getDeclaredField("path");

            loaders.setAccessible(true);

            ArrayList collection = (ArrayList) loaders.get(valueUcp);

    } catch (Exception e) {

        e.printStackTrace();

    }

}

Tomcat では動作しますが、websphere では動作しません。

PS。私の悪い英語を申し訳ありません。

4

2 に答える 2

1

この情報を取得するための移植可能な API はありません。WebSphere Application Server では、ClassLoader.toString には通常、診断目的で完全なクラス パスが含まれていますが、出力を「解析」しようとすることは絶対にお勧めしません。Tomcat でリフレクションを使用することもお勧めしません。現在の Tomcat バージョンでは機能する可能性がありますが、クラス ローダーの実装が変更されず、アプリケーションが壊れないという保証はありません。

于 2013-08-14T21:27:43.963 に答える
0

プログラムで取得する必要がない場合、これが私が提案するものです。コンソールでクラス・ローダー・ビューアーを使用すると、必要な情報が得られます。

自動化されたテスト ケースをテスト環境で実行し、これを表示すると、Web アプリケーションのニーズを満たすためにランタイムによって読み込まれたすべてのクラスを確認できるようになることをお勧めします。

そのようなものを書く必要があるのは何ですか?トラブルシューティングの段階で、ある種の NCDF または CNF 例外を見つけようとしている場合は、Class Loader Viewer を使用するアプローチが役立ちます。また、native_stderr.log で詳細なクラス ローダーの出力を確認すると、トラブルシューティング作業中に非常に役立ちます。

HTH マングル

于 2013-08-15T00:15:09.787 に答える