【问题标题】:OSGi dependency for org.beanio not resolvingorg.beanio 的 OSGi 依赖项未解决
【发布时间】:2017-01-12 20:49:05
【问题描述】:

我正在尝试OSGify我的项目。

我正在使用Fuse jboss-fuse-6.2.1.redhat-084,如果我查看osgi:headers 的包,我会收到红色错误org.beanio

Import-Package =
    com.thoughtworks.xstream;version="[1.4,2)",
    javax.activation,
    javax.mail;version="[1.4,2)",
    javax.mail.internet;version="[1.4,2)",
    javax.xml.bind,
    org.apache.activemq.camel.component,
    org.apache.camel;version="[2.15,3)",
    org.apache.camel.builder;version="[2.15,3)",
    org.apache.camel.dataformat.bindy.fixed,
    org.apache.camel.spring.spi;version="[2.15,3)",
    org.apache.cxf.interceptor;version="[3.0,4)",
    org.apache.log4j;version="[1.2,2)",
    org.beanio;version="[2.1,3)",
    (others)

错误:

缺少要求 osgi.wiring.package; (&(osgi.wiring.package=org.beanio)(version>=2.1.0)(!(version>=3.0.0)))))

我自己并没有明确导入beanio:它从org.jboss.fuse.bom 获取此保险丝。 camel-beanio version2.15.1.redhat-621084 并使用 org.beanio v2.1.0

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-beanio</artifactId>
    </dependency>

我已经用 grep 搜索了 osgi:classes 并且没有使用 v3.0。此外,v3.0 甚至不存在。所以,我不知道它从哪里得到“[2.1,3)”。

我想出了如何指定 2.1.0,但它只是抱怨找不到 2.1.0。

那我该怎么办?什么都没有导出 2.1.0。但我无法从 Import-Package 中删除它,因为 * 在搜索代码后包含它。

【问题讨论】:

  • 您似乎误解了错误消息。它说它需要 org.beanio 版本 >= 2.1.0 和 NOT >= 3.0.0...语法[2.1,3) 表示包含 2.1,最多 3 个不包含。
  • 你可以先在fuse shell中运行install:feature camel-beanio来安装camel-beanio。而且您应该始终在项目中使用与 Fuse 相同的版本。

标签: maven osgi jbossfuse fuseesb maven-bundle-plugin


【解决方案1】:

正如你自己所说:“camel-beanio 版本是 2.15.1.redhat-621084,它使用 org.beanio v2.1.0”

你只需要在你的 pom 中使用这个:

<dependency>
    <groupId>org.beanio</groupId>
    <artifactId>beanio</artifactId>
    <version>2.1.0</version>
</dependency>

这在 Maven Central 中,所以它应该可以工作。

正如我在评论中提到的,您收到的错误消息告诉您需要版本 >= 2.1.0 而不是 >= 3.0 的包 org.beanio

上面的依赖提供了这个包,可以看到here

但是,这似乎不是一个 OSGi 包...所以你必须wrap it

【讨论】:

  • 我添加了确切的依赖项。不修。我知道它正在寻找> v2.1.0 ...正如我所说,3.0 甚至不存在。我必须把它包起来吗?啊,我看到克劳斯的评论......会试一试。
  • 所以,功能:安装工作。但是添加依赖项不起作用。
  • 所以您的框架正在为您包装 jar...如果您使用 Bnd、Pax::wrap 或 osgi-run gradle 插件自己包装它,它也可以工作。
  • 我添加了一个关于如何将 jars 包装到 OSGi 包中的 SO 问题的链接。对于使用 Gradle 的任何人,只需使用 osgi-run,它会自动为您包装 jar。
【解决方案2】:

features.xml 中包含如下依赖:

<bundle>mvn:org.beanio/beanio/${version}</bundle>

然后,输入features:refreshurl 命令并安装包

【讨论】:

    猜你喜欢
    • 2014-04-14
    • 1970-01-01
    • 2014-04-15
    • 2017-05-20
    • 2020-07-17
    • 2023-03-12
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多