谷歌反思没有在注释方法上解析我的类型参数

时间:2015-06-22 21:58:24

标签: java annotations urlclassloader google-reflections

如果项目在我的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,以便它获取所有类型?

1 个答案:

答案 0 :(得分:0)

我想我刚刚使用forClassLoader而不是forPackage来解决它。