【问题标题】:Printing OSGI bundle classpath?打印 OSGI 捆绑类路径?
【发布时间】:2011-04-23 19:15:40
【问题描述】:

在普通的 java 应用程序中,可以使用以下命令打印类路径的内容:

String ss = System.getProperty("java.class.path");
System.out.println(ss);

但是如何打印使用 eclipse PDE 向导创建的 OSGI 包的类路径?在激活器中,可以获取当前包,例如:

public void start(BundleContext context) 抛出异常 { 超级开始(上下文); 插件 = 这个;

Bundle b  = context.getBundle();
 // java doc: This bundle's class loader is not used to search for entries. 
b.findEntries(path, filePattern, recurse)

但是 javadoc 说 findEntries 不使用类加载器。有什么简单的方法可以查看/打印当前包的类路径中的内容吗?

【问题讨论】:

  • 第一个问题是:你为什么要这么做?捆绑包没有真正的类路径概念,只有一组可访问的类。
  • 只是要明确一点:有一个称为 Bundle-ClassPath (osgi core 3.2.1.4) 的包头,但是鉴于您的“java.class.path”示例,这可能不是您的意思.

标签: eclipse classpath osgi


【解决方案1】:

正如其他人所指出的那样,实际上没有“捆绑类路径”之类的东西——这就是 OSGi 的全部意义所在。 :)

你可以做的是:

  • 查看捆绑包的标头以了解它导入了哪些包,以及它们是必需的还是强制的

  • 使用 PackageAdmin 查找导出具有给定名称的包的包

但是 AFAIK PackageAdmin 已被弃用,并且在 4.3 中将有一个新的/扩展的机制来处理捆绑布线。

您这样做的真正动机似乎是通过类路径扫描来查找和加载资源。这不容易实现的事实是强制执行模块边界的副作用:您不能有栅栏,同时允许任何人在草坪上行走。 有一个代表客户扫描捆绑包的标准服务计划,但似乎已被撤回(不知道为什么 - 可能是新的 4.3 内容的结果)。

【讨论】:

  • Stating PackageAdmin is deprecated 正在推动它,因为它在最新发布的规范 (R4.2) 中绝对没有被弃用。
猜你喜欢
  • 1970-01-01
  • 2016-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-07
  • 2011-03-30
  • 2011-06-24
  • 1970-01-01
  • 2014-12-21
相关资源
最近更新 更多