リフレクションを使用して、特定の注釈を持つクラスを見つけています。私のプロジェクト構造は次のとおりです
1 つの WAR パッケージ: WEB-INF/classes/...packages.../ClassAnnoted1.class
次のコードを実行するクラスを持つ war に含まれる 1 つの JAR パッケージ:
Reflections reflections= new Reflections(ClasspathHelper.forWebInfClasses(servletContext))
Set set= reflections.getTypesAnnotatedWith(CustomAnnotation.class)
CustomAnnotation も JAR パッケージに含まれています。
セットのサイズは正しいです (つまり、WAR の jar にアノテーションを持つ 3 つのクラスがある場合、セットのサイズは 3 に戻ります) が、その中のすべての要素は Class ではなく null です。クラスを取得し、JAR のクラス内の注釈パラメーターを確認する必要があります。
なぜこれが起こっているのか誰にも分かりますか?
編集:
Reflections reflections= new Reflections("com.my.customAnnotededClasses"); //package that my annoted class is in
Set set= reflections.getTypesAnnotatedWith(CustomAnnotation.class);
また、機能しません。この場合、セットの長さは、注釈付きのクラスの数ではなくゼロです。
EDIT 2:わかりました、本当の問題は、アプリケーション全体をEARとしてパッケージ化していたため、次のようになったことです:
EAR
----> WAR
----> JAR
jar は、WAR lib フォルダーではなく、EAR lib フォルダーに含まれていました。したがって、jar クラスは war クラスを表示できませんでした。WAR を次のように JAR に直接依存させると、次のようになります。
EAR
----> WAR
---------> JAR
それは働き始めました。しかし、元の質問はまだ残っています。WAR の代わりに EAR に Jar クラスを含めたい状況があるかもしれません (たとえば、jar を使用する必要がある複数の war がある場合)。