OSGI有效版本范围

时间:2011-12-02 08:46:19

标签: java osgi

目前我正在尝试实现OSGI版本范围(针对不同的主题,但我喜欢他们定义版本范围的方式)。但是我很难在OSGI中找到版本范围的具体定义。

不幸的是,OSGI API确实包含Version类,但不包含VersionRange类。似乎所有OSGI容器都提出了他们自己对(有些不可能的)版本范围定义的解释。

因此我有几个问题:

  • 如果我使用versionRange=1.4.0,是否会映射到版本> = 1.4.0?
  • 这是一个有效的版本范围:versionRange=[1.0.0,0]:我会说是(版本1.0.0到任何版本),Eclipse实现接受它作为版本但不能正确处理它。
    • 这是一个有效的版本范围:versionRange=[1.0.0,0)
  • 所有这些问题的真实来源在哪里?我似乎无法找到它。

4 个答案:

答案 0 :(得分:6)

版本范围 在OSGi核心规范的第3.2.6节中精确定义。你在当前的API中没有VersionRange类是正确的,尽管在下一个规范版本中会有。{/ p>

OSGi框架实现提出自己对范围的解释;如果您发现某个特定框架解释范围与核心规范第3.2.6节不同的情况,请提出针对该框架的错误。

解决您的具体问题:

  • 是的,version=1.4.0上的Import-Package(或bundle-version=1.4.0上的Require-Bundle)会非正式地映射到“版本&gt; = 1.4.0”。< / p>

  • 我相信这两个版本范围都是有效的,但它们永远不会匹配任何版本。例如。第一个示例仅匹配版本x x >= 1.0.0 x<=0。没有x的值可以满足这两个要求。所以听起来Eclipse的行为正确......它应该成功解析范围字符串,但永远不会返回任何结果。

  • 如前所述,如果您正在阅读文档的R4.3版本,那么“真相来源”是OSGi核心规范的第3.2.6节....第29页。

    < / LI>

答案 1 :(得分:5)

所以,按顺序回答你的具体问题:

  
      
  • 如果我使用的是versionRange = 1.4.0,那么这会映射到版本&gt; = 1.4.0吗?
  •   

是。这正是规范应该解释的方式(见下文)。

  
      
  • 这是有效的版本范围:versionRange = [1.0.0,0]
  •   

是的,它是一个有效的范围,但它不会评估你似乎期待的。 它有效地评估为一组空的版本,因此没有版本匹配此表达式。

  
      
  • 这是一个有效的versionRange以及:versionRange = [1.0.0,0)?
  •   

与上面相同 - 它是有效的版本范围,但它将评估为空集。

  
      
  • 所有这些问题的真实来源在哪里?我似乎无法找到它
  •   

规范可在OSGi Alliance's主页上找到: http://www.osgi.org/Release4/Download(适用于R4规格)

以下是OSGi R4核心规范的摘录,涵盖了版本范围:

  

版本范围

     

版本范围使用数学区间表示法描述一系列版本。参见[31]区间符号数学公约。

     

版本范围的语法是:

    version-range ::= interval | atleast
    interval ::= ( '[' | '(' ) floor ',' ceiling ( ']' | ')' )
    atleast ::= version
    floor ::= version
    ceiling ::= version
  

如果版本范围指定为单个版本,则必须将其解释为范围[version,)非指定版本范围的默认值为0,映射到[0.0.0,)

     

请注意,在版本范围内使用逗号需要将其括在双引号中。例如:

Import-Package: com.acme.foo;version="[1.23, 2)",
    com.acme.bar;version="[4.0, 5.0)"
  

在下表中,对于左侧列中的每个指定范围,如果右侧列中的谓词为真,则认为版本x是该范围的成员。

[1.2.3, 4.5.6)  |  1.2.3 <= x <  4.5.6
[1.2.3, 4.5.6]  |  1.2.3 <= x <= 4.5.6
(1.2.3, 4.5.6)  |  1.2.3 <  x <  4.5.6
(1.2.3, 4.5.6]  |  1.2.3 <  x <= 4.5.6
1.2.3           |  1.2.3 <= x

答案 2 :(得分:1)

1)versionRange = 1.4.0相当于[1.4.0,无穷大]

2)我认为它无效,因为地板应该低于天花板。

3)我相信下一个OSGi规范将定义一个VersionRange类。

答案 3 :(得分:1)

请参阅http://www.osgi.org/Download/File?url=/download/osgi-early-draft-2011-09.pdf中的RFC 175。它定义了版本定义的更新,还引入了VersionRange类。

版本范围可以为空,例如第二个项目符号中的示例。空版本范围不包含任何版本。