【问题标题】:OSGi: how to properly install a resolution answer Map<Resource,List<Wire>>?OSGi:如何正确安装解析答案 Map<Resource,List<Wire>>?
【发布时间】:2019-12-20 06:37:58
【问题描述】:

你好,晚上好,

我一直在使用 Eclipse IDE 和 Bndtools 插件对 OSGi 进行一些试验。

我制作了一个捆绑包并在捆绑包的一个包中创建了一个组件。 我在该组件中创建了自己的ResolveContext,并确保Resolver 能够解决我的问题。

调用Resolver.resolve(ResolveContext)-方法时,如果找到解决方案,则返回Map&lt;Resource,List&lt;Wire&gt;&gt;

在我的例子中,我处理了这个问题,只需要安装 1 个资源/捆绑包,但我不太明白我从 Resolver 得到的答案。

我正在取回包含 2 个条目的地图:

1): org.bram.package.MyComponent$2@10c23f49 [org.bram.package.MyComponent$1@792102f3 -> [org.organisation.types.domotics version=0.12.1] ]

2): org.organisation.types.domotics version=0.12.1=[]

请注意,org.bram.package.MyComponent 是我制作的组件,也是使用解析器的地方。 Resources 的命名并不重要,我只是不明白这个答案的含义以及如何采取行动。

要完成此解决方案,我是否应该简单地安装捆绑包org.organisation.types.domotics 版本0.12.1(可以从我的存储库中获得)?

如果需要更多信息,请询问,我会尽力提供尽可能详细的信息。

谢谢

【问题讨论】:

  • 直接使用resolver有什么特殊原因吗?通常,您会创建一个 bndrun 文件,在其中指定存储库以及初始需求/捆绑包,并且 bndtools 会根据解析过程计算运行包。
  • 嘿克里斯蒂安,我直接使用它有一个特殊的原因。这是深入研究 OSGi 的经验的一部分。当某个事件发生时,必须从组件中调用解析器(因此在运行时)。很好的评论,但它是故意的。

标签: java osgi resolver bnd bndtools


【解决方案1】:

您没有指定最初放入解析器和存储库的要求。所以有点难说。

我假设您将 MyComponent 的捆绑包作为一个要求放入解析过程中,它会告诉您需要安装捆绑包以及 domotics 类型捆绑包以实现关闭。

【讨论】:

  • 我没有具体说明我最初提出的要求,因为我认为这在这种情况下并不重要(如果我错了,请纠正我)。没有必要的原因是因为无论解析器的结果是否正确,我想了解这个结果的含义以及应该如何处理。我们假设resolve过程返回的Map是正确的。它包含这两个条目。第一个条目给出了我自己的资源(调用解析器的包)和一个带有 1 根线的 List。第二个条目给出了 Wire 中给出的资源。请参阅下一篇文章..
  • 我的问题实际上是:如果是这个解决方案的答案,应该怎么做才能实现框架?我应该只安装地图提供的新资源吗?我是否应该安装地图提供的新资源并创建每个资源提供的电线并将它们添加到该资源中(尽管不知道这是否是一回事)。你明白我要去哪里吗?我只想处理解析器的答案,假设它是完全正确的。感谢您的反应!
  • 我只是重新阅读了您的评论和一个小提示:MyComponent 的捆绑不是作为要求添加的。添加到 ResolveContext 的要求是 org.organisation.types.domotics-package。这个包本身有 1 个要求,那就是 osgi.ee 命名空间和 JavaSE 1.8 版本。这已经由框架包提供,因此在与 ResolveContext 中的 getWirings 方法进行比较时满足要求。
猜你喜欢
  • 1970-01-01
  • 2020-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多