【问题标题】:OSGi: Get list of classes in packageOSGi:获取包中的类列表
【发布时间】:2011-08-16 21:34:57
【问题描述】:

是否可以找到给定包中的所有类或接口?在“普通 Java”中没有简单的方法可以做到这一点,但 OSGi 可能做得更好,不是吗?

【问题讨论】:

    标签: osgi


    【解决方案1】:

    简而言之:没有。OSGi 通过在需要时提供类来扩展 Java 类加载机制,但没有 API 允许您检查给定包中哪些类可用。

    【讨论】:

    • 有趣,因为“Java 方式”的做法(从类路径中取出 jar 并自省)在 OSGi 中不再起作用。
    • 啊,我明白了。两个系统都使用一种机制,其中类具有完全限定名,并且您要求类加载器“给我这个类”;从这个意义上说,没有任何改变,但是选择正确班级的方式不同。如果你真的想要,你仍然可以找出你正在使用的包,并自己检查包。在这种情况下,如果多个包提供相同的包,包含不同的类,您仍然会遇到问题;我不建议你这样做,除非你有一个非常具体的用例。
    • 我的意思是 - 我无法获取 jar 文件,因此无法深入研究。
    • 新的 BundleWiring API 上不仅有 listResources 非常适合,而且在 bundle 上总是有 getEntryPaths 允许您以更复杂的形式获取相同的信息,因为您必须了解捆绑类路径。 Java 中没有明确的方式来获取 JAR 并对其进行迭代,因为您的类的源代码甚至可能不是 JAR ......很多人都在这样做,但这是一场等待发生的灾难并且不可移植。
    【解决方案2】:

    从 4.3 开始答案是肯定的。添加了一个新的 API:

    BundleWiring.listResources(String path, String filePattern, int options)

    可用于扫描包的类路径。通过适当的参数,您可以获取包中所有类的名称。

    【讨论】:

    • 酷,我还没看到那个!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2012-07-30
    • 1970-01-01
    • 2011-04-24
    • 2012-12-26
    • 2012-07-22
    相关资源
    最近更新 更多