首页 > 解决方案 > 从引用的库中使用时未配置 Scanner TypeAnnotationsScanner

问题描述

我有一个类,用于org.reflections.Reflections在类路径中的类中获取注释。

当我在同一个项目中使用它时,一切正常,但是当我将它导出为 JAR 并在不同的类中引用它时,我得到以下执行:

Exception in thread "main" org.reflections.ReflectionsException: Scanner TypeAnnotationsScanner was not configured
    at org.reflections.Store.get(Store.java:39)
    at org.reflections.Store.get(Store.java:61)
    at org.reflections.Store.get(Store.java:46)
    at org.reflections.Reflections.getTypesAnnotatedWith(Reflections.java:429)

这是代码片段:

        System.out.println("Package to Scan: "+getPackageName());
        final Reflections reflections = new Reflections(getPackageName(), new TypeAnnotationsScanner());
        final Set<Class<?>> handlerClasses = reflections.getTypesAnnotatedWith(HandlerMapping.class,true);

我确实提供了一个TypeAnnotationsScanner对象,但问题仍然存在。

注意:仅当上述代码被称为 jar 时,它才起作用。(我使用 maven-assembly 插件创建了一个胖罐子)

任何指针?

标签: javareflection

解决方案


2021 年 10 月 4 日更新:

此错误已在 0.10 版中修复。

上一个答案:

也许不是人们想听到的答案类型,但reflections版本0.9.12包含此处描述的错误:https ://github.com/ronmamo/reflections/issues/273

此 PR 中提供了错误修复(尚未合并):https ://github.com/ronmamo/reflections/pull/278

0.9.11版本和版本之间的主要区别在于,删除0.9.120.9.12Guava 依赖以支持 Java 8 Streams API。

如果你需要在没有 Guava 传递依赖的情况下包含这个依赖,你可以看下一个项目:https ://github.com/aschoerk/reflections8 目前,最新可用的版本reflections80.11.7. 注意,reflections8现在由于0.9.12发布而被认为已过时,reflections但他们的版本0.11.7不包含此错误,并且此版本不依赖于 Guava。因此,一个可能的解决方案是切换到net.oneandone.reflections8:reflections8:0.11.7.


推荐阅读