0

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

抽象モジュール

ルートモジュール

プライベートモジュール

4

1 に答える 1

0

ClasspathHelper.forClass(Module.class) は Guice の jar のみを返します。つまり、パッケージはスキャンされません。

ConfigurationBuilder にさらに URL を追加する必要があります。

そして、いつでもすべてをスキャンできます (ClasspathHelper.forClassLoader())...

于 2014-05-27T15:23:00.947 に答える