如果项目在我的classpath本地并且我执行了getClass()。getClassLoader(),我有以下代码可以很好地工作。但是当我尝试从外部jar动态加载时,它失败了。
无法加载MyType,这是方法参数上的类型,如下所示:
@MyAnnotation("FOO.BAR")
public Object echo(@Valid MyType param) throws Exception {
return...;
}
此代码将因" org.reflections.ReflectionsException而失败:无法获取名称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,以便它获取所有类型?
答案 0 :(得分:0)
我想我刚刚使用forClassLoader而不是forPackage来解决它。