Java反射 - 类加载器检测旧包和新包中的移动类

时间:2014-10-24 20:31:29

标签: java eclipse maven refactoring package

我一直在搞乱类加载器和其他反射方法,似乎我遇到了一个奇怪的错误。我以前有一个文件,让我们说" 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);

&#34; ClassA.java&#34; class在allClasses集中出现两次(因为这些类因包的不同而最终不同)

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

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

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

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果这是一个webapp,请删除服务器并重新创建它。就我而言,它是一个从Eclipse内部部署到tomcat服务器的webapp。在我删除服务器并重新创建它之前,没有任何工作,然后读取webapp并再次启动服务器。繁荣。问题解决了。

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

希望这可以帮助那些人。