列出包的所有子包(当它们的类被动态加载时)

时间:2019-01-14 00:39:46

标签: java package

我正在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浏览类树检查吗?

事先想好。

1 个答案:

答案 0 :(得分:0)

几乎可以肯定,解决此问题的最佳方法是创建一个列表作为构建步骤(可能是.java文件)。

Package.getPackage已过时。

Package.getPackages是一个静态方法-它没有按照您认为的那样做。

这两种方法都使用调用者的类加载器,这令人惊讶,并且如果您“真正”动态地加载类,则用处不大。

对于卸载的类,我想您正在寻找掌握类加载器的类路径(假设它是某种URLClassLoader)并遍历目录/读取jar / zip目录(或清单) (如果存在)。

模块可能有用-我还没有真正看过它们。