【问题标题】:Java reflection - classloader detecting moved class in old and new packageJava 反射 - 类加载器检测新旧包中移动的类
【发布时间】:2014-12-20 18:11:15
【问题描述】:

我一直在搞乱类加载器和其他反射方法,似乎遇到了一个奇怪的错误。我曾经有一个文件,让我们在一个包中说“ClassA.java”,让我们说“com.a”。但是,我不得不将它移动到包“com.b”。

现在,当我使用此代码获取两个包中的所有类时,

ClassLoader[] classLoaders = new ClassLoader[] { ClasspathHelper.contextClassLoader(), ClasspathHelper.staticClassLoader() };

    String[] packagePrefixes = {"com.a", "com.b"};
    FilterBuilder filterBuilder = new FilterBuilder();
    for (String packagePrefix : packagePrefixes)
        filterBuilder.includePackage(packagePrefix);

    ConfigurationBuilder configurationBuiler = new ConfigurationBuilder()
            .setScanners(new SubTypesScanner(false), new ResourcesScanner())
            .setUrls(ClasspathHelper.forClassLoader(classLoaders))
            .filterInputsBy(filterBuilder);

    Set<Class<?>> allClasses = new Reflections(configurationBuiler).getSubTypesOf(Object.class);

“ClassA.java”类在 allClasses 集中出现了两次(因为类的不同,最终是不同的)

我尝试清理和删除/重新制作包和文件,但似乎认为该文件存在于两个包中。

当我将文件拖入“com.b”时,eclipse给了我正常的弹出窗口,我没有检查“更新非Java文件中的完全限定名称”。

我有一个 Maven 项目。有任何想法吗?谢谢!

【问题讨论】:

    标签: java eclipse maven refactoring package


    【解决方案1】:

    【讨论】:

      【解决方案2】:

      如果这是一个 web 应用程序,请删除服务器并重新创建它。在我的例子中,它是一个从 Eclipse 中部署到 tomcat 服务器的 webapp。在我删除服务器并重新创建它,然后读取 webapp 并再次启动服务器之前,没有任何效果。繁荣。问题解决了。

      某处的某些缓存没有被清除。清除tomcat的工作目录是不够的。

      希望这对那里的人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多