我正在Eclipse上编码。在名为com.something.drivers
的程序包下,我创建了许多子程序包,其中包含实现一些常用接口的类。这是Driver模式的示例,因此子包下的类将从主应用程序动态加载。由于每个驱动程序子包中的所有类都具有相同的名称,因此应用程序可以在包名之后猜测类的合格名称。
现在,我正在尝试获取已安装驱动程序的列表(com.something.driver
软件包下的子软件包)。我不想维护手动编辑的列表,而只是从实际安装的驱动程序中获取它。
我阅读了List all subpackages of a package并学习了如何使用Package
类,但是我发现Package.getPackage(com.something.driver).getPackages()
返回null,因为仅加载了com.something.driver
子包中的类动态,一次一次。
我现在迷路了。我想不是Package
类,但是可能用getResource
浏览类树检查吗?
事先想好。
答案 0 :(得分:0)
几乎可以肯定,解决此问题的最佳方法是创建一个列表作为构建步骤(可能是.java
文件)。
Package.getPackage
已过时。
Package.getPackages
是一个静态方法-它没有按照您认为的那样做。
这两种方法都使用调用者的类加载器,这令人惊讶,并且如果您“真正”动态地加载类,则用处不大。
对于卸载的类,我想您正在寻找掌握类加载器的类路径(假设它是某种URLClassLoader
)并遍历目录/读取jar / zip目录(或清单) (如果存在)。
模块可能有用-我还没有真正看过它们。