2

したがって、問題は次のように聞こえます。

プロジェクトで特定のアノテーションを持つすべてのクラスを取得する必要があります。私は外部ライブラリなしでこれを行うことができました(文字通りすべての.classファイルをsrcフォルダーに取得し、クラスに注釈があるかどうかを確認します)。ローカルで実行すると(Javaアプリケーションとして実行すると)正常に動作します。プロジェクトを.jarとしてエクスポートし、同じクラスを実行しようとすると、もちろん、パーサーがクラスを見つけることができないため、機能しません。基本的に、同じjarを実行しているときに、jarファイル内のすべての.classファイルを取得しようとしています。リフレクションのような別のライブラリを追加せずにこれを行うことができる方法はありますか?

ありがとうございました

4

1 に答える 1

0

車輪を再発明する必要性を本当に感じている場合は、サードパーティのライブラリのほとんどがオープン ソースであるため、引き続き役立ちます。特に、これはSpringのクラスパススキャナーの実装であり、このクラスを利用して実際にリソースを見つけます。

実装に違いがないように本当にやりたい場合は、martijnoが提案したように、最初にjarを抽出する方法があります。ただし、jar がクラスパスにない場合は、jarからクラスをロードするためにURLClassLoaderのようなものが必要になります。

もう 1 つの方法は、クラスパスをスキャンするように現在の実装を変更することです。これには、ClassLoader.getResourcesメソッドを使用して、特定のパッケージ内のすべてのクラスとサブパッケージを検索することが含まれます。次に、ファイルを使用しているか jar を使用しているかに関係なく、必要なクラスを含むクラス ローダー (URLClassLoader など) を取得するだけです (または、クラスパス上にある場合はシステム クラス ローダーを使用します)。

于 2012-08-21T13:04:23.560 に答える