我一直在搞乱类加载器和其他反射方法,似乎我遇到了一个奇怪的错误。我以前有一个文件,让我们说" 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项目。有任何想法吗?谢谢!
答案 0 :(得分:1)
答案 1 :(得分:0)
如果这是一个webapp,请删除服务器并重新创建它。就我而言,它是一个从Eclipse内部部署到tomcat服务器的webapp。在我删除服务器并重新创建它之前,没有任何工作,然后读取webapp并再次启动服务器。繁荣。问题解决了。
某处的某些缓存未被清除。清除tomcat的工作目录是不够的。
希望这可以帮助那些人。