【问题标题】:maven-bundle-plugin Creates unexpected Import-Package contentmaven-bundle-plugin 创建意外的 Import-Package 内容
【发布时间】:2015-05-19 05:51:42
【问题描述】:

我使用maven-bundle-plugin 构建所有捆绑包,在使用pax:provision 进行一些测试后,我发现它正在所有捆绑包上创建Import-Package=org.osgi.framework;version="[1.8,0)",并且在Felix 中安装捆绑包时,我的所有捆绑包都未解决因为org.osgi.framework.BundleException: Unresolved constraint in bundle com.domain.mybundle [55]: Unable to resolve 55.0: missing requirement [55.0] osgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))

如果我没有直接依赖于那个包,为什么maven-bundle-plugin 创建这个头文件。我也尝试添加依赖:

<dependency>
  <groupId>org.apache.felix</groupId>
  <artifactId>org.apache.felix.framework</artifactId>
  <version>4.6.0</version>
</dependency>

它仍然使用版本1.8.0。知道为什么吗?

更新

再次检查,捆绑包确实使用了激活器中的org.osgi.framework。但是这个类 org.osgi.framework.BundleActivator 来自捆绑包:

<dependency>
  <groupId>org.osgi</groupId>
  <artifactId>org.osgi.core</artifactId>
  <version>4.3.1</version>
  <scope>provided</scope>
  <optional>true</optional>
</dependency>

那么,为什么maven-bundle-plugin 不使用版本4.3.1 而不是1.8.0?在其他捆绑包中,它使用版本1.6.2

2015 年 3 月 20 日更新

这是我在执行mvn pax:provision后收到的异常

org.osgi.framework.BundleException: Unresolved constraint in bundle org.classdomain.per
sistence [47]: Unable to resolve 47.0: missing requirement[47.0] osgi.wiring.package; 
(&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(version>=2.0.0)))ERROR: 
Bundle org.classdomain.persistence [47] Error starting file:bundles/org.classdomain.per
sistence_0.1.0.jar (org.osgi.framework.BundleException: Unresolved constraint in bundle
 org.classdomain.persistence [47]: Unable to resolve 47.0: missing requirement [47.0] o
sgi.wiring.package; (&(osgi.wiring.package=org.osgi.framework)(version>=1.8.0)(!(versio
n>=2.0.0))))

        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:4002)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2045)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1299)
        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:745)

当然,这个异常似乎只在使用 mvn pax:provision 时发生,如果我在独立的 Felix 实例中安装相同的包,那么一切都会按预期工作。

【问题讨论】:

    标签: java maven osgi apache-felix maven-bundle-plugin


    【解决方案1】:

    Import-Package 语句是根据您使用的库中定义的包版本构建的。在您的情况下,您依赖于 org.apache.felix.framework,它在其清单中定义了这些导出(例如 org.osgi.framework 版本 1.8)。

    如果你只依赖 org.osgi.core 4.3.1,那么包 org.osgi.framework 应该定义为 1.6 版本。所以这应该可行。

    【讨论】:

    • 感谢您的回答。是的,但是如果我使用依赖项 org.osgi.core 4.3.1 那么包定义了一个 Import-Package 到 org.osgi.framework 1.6,那么它(Felix)说没有 org.osgi.framework 1.6!那么如果 maven-bundle-plugin 显示为“缺少要求”,那么将其更改为 1.6 有什么意义呢?
    • 您的设置似乎有问题。我总是使用 org.osgi.core 4.3.1 并且生成的包适用于我使用过的所有 osgi 框架(felix、Equinox)。 [1.6,0) 的导入范围表示这个包的任何版本>=1.6 都可以。因此,如果 felix 4.6.0 提供 1.8 版本,它将是兼容的。您能否发布使用 org.osgi.core 4.3.1 规范时遇到的确切错误?
    • 嗨,刚刚更新了问题并发布了 Felix 在pax:provision 下收到的详细错误。我终于在没有 Pax 插件的情况下对其进行了测试,并且可以正常工作。因此,我最终删除了 Pax 插件并将生成的捆绑包与依赖项一起复制到另一个文件夹,然后手动将它们全部安装到 Felix 实例(捆绑包文件夹)并从那里测试捆绑包。
    猜你喜欢
    • 2012-09-08
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2012-07-16
    • 2013-09-01
    • 2017-09-26
    • 1970-01-01
    • 2013-02-10
    相关资源
    最近更新 更多