![](/img/trans.png)
[英]How do I add classes to the classpath for MBean Explorer in eclipse
[英]How do I get a list of packages and/or classes on the classpath?
在Java中,我可以使用ClassLoader來獲取已經加載的類的列表,以及這些類的包。 但是如何獲取可以加載的類列表,即在類路徑上? 與包相同。
這適用於編譯器; 在解析foo.bar.Baz時,我想知道foo是否是一個將其與其他任何東西區分開來的包。
我認為org.reflections庫應該做你想要的。 它會掃描類路徑,並允許您獲取所有類或僅擴展特定超類型的類。 從那里,應該可以獲得所有可用的包。
它有點棘手,有一些庫可以提供幫助,但基本上......
如果你的類路徑中有spring,那么你可以利用它們完成大部分工作:
ArrayList<String> retval = new ArrayList<Class<?>>();
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resolver);
String basePath = ClassUtils.convertClassNameToResourcePath("com.mypackage.to.search");
Resource[] resources;
try {
resources = resolver.getResources("classpath*:" + basePath + "/**/*.class");
} catch (IOException e) {
throw new AssertionError(e);
}
for (Resource resource : resources) {
MetadataReader reader;
try {
reader = readerFactory.getMetadataReader(resource);
} catch (IOException e) {
throw new AssertionError(e);
}
String className = reader.getClassMetadata().getClassName();
retval.add(className)
}
return retval;
我自己已經找到了答案,但這是不可能的。
我知道的唯一方法是,您可以在特定目錄中加載所有類,然后在其中搜索以.class結尾的文件的名稱。
之后,您可以對這些文件名執行Class.forName(name_of_class_file).createInstance()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.