割り当て用の静的分析ツールを作成しています。これは、ASMライブラリを使用してJavaバイトコードを分析します。私たちが使用するASMの部分の1つは、クラスがClassLoaderからロードされることを要求します(または少なくとも要求するように見えます)。
ツールがクラスパスに.classファイルを必要とせずに.classファイルを分析できることを望んでいました。実行時に指定されたディレクトリから.classesをすでにロードし、InputStreamを使用してそれらを読み込みます。ほとんどの場合、これはASMで許容されます。SimpleVerifier
ただし、クラスをロードしようとするクラスなどがあります。
このシナリオでは、を呼び出すとロードされるように、ロードする.classファイルを登録することは可能Class.forName()
ですか?または、これを可能にするためにClassLoaderを拡張する簡単な方法はありますか?
編集:に関する情報URLClassLoader
は役に立ちました。残念ながら、Thread.currentThread().setContextClassLoader()
そのインスタンスを使用することは、このシナリオでは機能しませんでした。私が呼び出しているライブラリコードは、を使用したインスタンスの初期化時に取得するローダーを使用しますgetClass().getClassLoader()
。
URLClassLoaderを設定した時点では、クラスは初期化されていないため、contextClassLoaderはそのクラスをロードしないと思います。
応答を正しく理解しましたか?URLClassLoaderを使用してサードパーティのクラスをロードすることは可能でしょうか?