プロジェクトがローカルのクラスパスにあり、getClass().getClassLoader() を実行する場合にうまく機能する次のコードがあります。しかし、外部 jar から動的にロードしようとすると失敗します。
次のようなメソッド パラメーターの型である MyType の読み込みに失敗します。
@MyAnnotation("FOO.BAR")
public Object echo(@Valid MyType param) throws Exception {
return...;
}
このコードは、「org.reflections.ReflectionsException: could not get type for name MyType」で失敗します。
myLoader = new URLClassLoader(new URL[]{new URL("file:///"+jarfile)});
myLoaders.Add(myLoader);
ConfigurationBuilder builder = new ConfigurationBuilder()
.addClassLoaders(loaders)
.setScanners(new MethodAnnotationsScanner())
.setUrls(ClasspathHelper.forPackage(myPackage, myLoaders));
Reflections reflections = new Reflections(builder);
return reflections.getMethodsAnnotatedWith(MyAnnotation.class);
問題はクラスローダーにあると思います。すべてのタイプを取得するように jar をロードする別の方法はありますか?