gpt4 book ai didi

java - 我可以使用版本限定符来要求 OSGi 中的特定包版本吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:15:58 25 4
gpt4 key购买 nike

我有一个我希望包装的第三方 JAR - 它没有自己的 OSGi list 。例如,org.myprojectSo I create a bundle wrapper.

这很好用 - 我提供了 org.myproject 的版本。这是由 org.myproject 的作者指定的。比如,1.0.1

现在,org.myproject 已更改,我想包含更改。但是,没有官方发布。这听起来我可以使用限定符来表示较新的版本:1.0.1.$timestamp

但是,当使用 bndtools 包装 JAR 时,包导出的版本仍为 1.0.1

是否可以在 OSGi 中导出然后导入限定符特定的包版本?在 bndtools 中管理它的最佳方法是什么?

最佳答案

我们说的是什么版本?如果您使用 1.2.3.XXXXX 对 bnd 中的包进行版本控制,那么这就是您将作为导出获得的包版本。

但是,默认情况下,bnd 在基于导出创建导入范围时会去除限定符。您应该能够使用版本策略覆盖它。默认值是:

-provider-policy    = ${range;[==,=+)}
-consumer-policy = ${range;[==,=+)}

您可以轻松地更改它们以包含限定符。

然而,这将是一个全局性的变化,我希望你会后悔。

所以另一种解决方案是修改这个坏包的导入:

Import-Package org.myproject;version="${range;[====.=+);${@}}", *

当然,最简单的解决方案是结束它并接受将口红涂在 pig 身上并不会使其在语义上版本化。只需将版本与依赖项从您的 bundle 中分离出来。在那些情况下,我倾向于选择一个奇怪的主要数字,例如100,以明确我的版本不是目标的版本。

由于我对这些项目有一些不愉快的记忆,所以我也可以建议您看一下 OSGi contracts .使用契约(Contract),您不需要对包进行版本控制,而是使用契约(Contract)要求。

然后是最后一个,绝对是最好的,你真的需要对那个项目进行版本控制吗?我发现在大多数情况下,开发我自己的 OSGi API 来反射(reflect)我对这个外部目标的需求是非常值得的。然后我可以将该包很好地隐藏在一个黑暗的地方,在那里它可能会因为没有进行语义版本控制而受到影响:-)

关于java - 我可以使用版本限定符来要求 OSGi 中的特定包版本吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35489196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com