ホームページ > Java > &#&チュートリアル > 実行時に JAR またはフォルダーから Java クラスを動的に検出して検査するにはどうすればよいですか?

実行時に JAR またはフォルダーから Java クラスを動的に検出して検査するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-17 16:31:02
オリジナル
330 人が閲覧しました

How Can I Dynamically Discover and Inspect Java Classes at Runtime from JARs or Folders?

実行時にフォルダーまたは JAR からクラスを検出する

Java アプリケーションの構造を詳しく調べて、有意義な洞察を抽出する Java ツールを想像してください。これを実現するには、ツールは指定されたソース (JAR/WAR またはフォルダー) から .class ファイルをスキャンする必要があります。次に、リフレクションを使用してクラス メソッドとその属性を検査します。ただし、このタスクはとらえどころのないことが判明しています。

URLClassloader に基づくソリューションが多数存在し、ディレクトリまたはアーカイブから特定のクラスをロードできるようになります。ただし、クラスの名前やパッケージ構造についての事前知識がなければ、クラスを識別してロードできるものはないようです。

問題の核心に対処する

詳しく調べると、課題は次のとおりです。再帰的スキャン技術によってすべてのクラス ファイルを取得するのではなく、検出された各ファイルの Class オブジェクトを取得することにあります。

JarFile と URLClassLoader の機能を活用する

提供されたコードJava NIO を効果的に利用して、クラスの存在に関する事前知識を必要とせずに、JAR ファイルからすべてのクラスをロードします。このプロセスには以下が含まれます。

  1. 問題の JAR を表す JarFile オブジェクトの構築
  2. .class ファイルを識別するための JarFile のエントリの列挙
  3. .class ファイルをロードするための URLClassLoader インスタンスの作成それぞれの JarEntries で定義されているように抽出されたクラス名

代替案の検討: Javassist

コメンテーターが示唆しているように、Javassist は別の実行可能なオプションを提供します。ループの前に ClassPool を初期化すると、クラス ローダーを使用してクラスをロードする代わりに CtClass オブジェクトを作成できます。 CtClass オブジェクトは、メソッド、フィールド、ネストされたクラスなどを含むクラス属性の配列へのアクセスを提供します。

この包括的なソリューションにより、開発者は実行時にクラスを動的にロードおよび検査できるようになり、強力な基盤が提供されます。洗練されたコード分析および操作ツール。

以上が実行時に JAR またはフォルダーから Java クラスを動的に検出して検査するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート