我正在使用http://reflections.googlecode.com/实用程序
这是我尝试执行的方法
//只应将顶级模块添加到此列表
protected Set<Class<? extends Module>> discoverModulesOnClassPath() {
// Scan classpath to identify modules
Predicate<String> filter = new FilterBuilder().includePackage("org.appops.server.core.bindings") ;
Reflections reflections = new Reflections(new ConfigurationBuilder()
.setScanners(new SubTypesScanner()).setUrls(asList(ClasspathHelper.forClass(Module.class))));
Set<Class<? extends Module>> guiceModules = reflections.getSubTypesOf(Module.class);
return guiceModules;
}
这是我的考试
@Test
public void testDiscoverModulesOnClassPath() {
AppOpsCoreServletConfig config = new AppOpsCoreServletConfig() ;
Set<Class<? extends Module>> modules = config.discoverModulesOnClassPath() ;
for ( Class m : modules){
System.out.println(m.getSimpleName());
}
}
我在特定包中有3个自定义模块(已经交叉检查了路径)但是它打印了这个类列表
ProviderMethodsModule
AbstractModule
RootModule
PrivateModule
答案 0 :(得分:0)
ClasspathHelper.forClass(Module.class)只返回Guice的jar,这意味着你的包不会被扫描。
您需要向ConfigurationBuilder添加更多网址。
你可以随时扫描所有内容(ClasspathHelper.forClassLoader())......