【问题标题】:Could not start bundle Unresolved constraint in bundle osgi.wiring.package=org.apache.commons.configuration version>=1.9.0 ! version>=2.0.0无法启动捆绑包 osgi.wiring.package=org.apache.commons.configuration version>=1.9.0 中未解决的约束!版本>=2.0.0
【发布时间】:2018-06-21 11:46:28
【问题描述】:

我正在尝试使用功能安装我的 apache camel 应用程序的最新版本:在 Karaf 上安装 这个新版本依赖于 org.apache.commons.configuration ver 1.9 但出现以下错误

错误:

Error executing command: Could not start bundle mvn: in feature(s)<package> : Unresolved constraint in bundle <bundle> [414]: Unable to resolve 414.0: missing requirement [414.0] osgi.wiring.package; (&(osgi.wiring.package=org.apache.commons.configuration)(version>=1.9.0)(!(version>=2.0.0)))

我已经将它包含在 pom.xml 中

<dependency>
        <groupId>commons-configuration</groupId>
        <artifactId>commons-configuration</artifactId>
        <version>1.9</version>
    </dependency>

也尝试了sof中建议的几种方法,但没有一个有效

也将for org.apache.commons.configuration 放在plugins 下

        <plugins>
        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <instructions>
                    <Import-Package>
                        org.apache.cxf.service.model,
                        org.apache.cxf.message,
                        org.apache.commons.configuration,
                        *
                    </Import-Package>
                </instructions>
            </configuration>
        </plugin>

但仍然无法解决。有人可以帮忙解决这个问题吗?

谢谢

【问题讨论】:

  • 将此捆绑包添加到您自己的功能文件中,以便与您的应用程序一起安装。
  • 嗨@ClausIbsen,你能解释一下吗..我是Apache Camel和Karaf的新手。哪个捆绑包?以及如何添加到自己的功能文件中?谢谢
  • 你在 features 中输入什么命令:install 来安装你的应用程序。

标签: maven apache-camel osgi apache-karaf karaf


【解决方案1】:

您真的想从另一个部署的包中导入它还是应该是一个简单的嵌入式依赖项?

由于您将其列在Import-Package 下,因此您期望第一个。为此,您需要在导出 org.apache.commons.configuration 的容器中部署另一个包。

如果您想将其作为简单依赖项嵌入到同一个包中,则必须将其从 Import-Package 中排除,并以 ! 作为前缀,并且可能使用 Embed-Dependency 指令,如此答案中的示例:https://stackoverflow.com/a/30532447/8035582

【讨论】:

  • 嗨@burki,感谢您的回复。最初我只是为配置添加了 。即使那样,它也是同样的错误。然后根据几个stackoverflow线程,我将它包含在 中以包含它..但即使它也没有用。所以如果我前缀!或者删除 并使用 ,它会工作吗?
  • 只是在 Maven 中创建一个构建时依赖,它对运行时没有影响。您需要确保捆绑包实际上包含在您的运行时应用程序中。
  • 在任何地方使用嵌入依赖并不是解决未解析导入的通用解决方案,因为它会导致每个包都包含相同 API 的副本。这会导致无法相互通信的非常大的包。
  • Import-Package 的默认值为*。这意味着:从同一个 osgi-container 中的其他包中导入所有包(包中包含的包所需要的包)。这就解释了为什么仅通过添加依赖项才会出现相同的错误。因此,如果容器中的另一个包没有提供它,则必须将其从Import-Package 中排除,并将其嵌入到您的包中。您可以使用Embed-Dependency 来做到这一点。例如,您可以使用 &lt;Embed-Dependency&gt;*;scope=compile&lt;/Embed-Dependency&gt; 嵌入所有编译时依赖项。
  • 嗨@burki,我尝试了从 中删除 org.apache.commons.configuration 并使用 org.apache.cxf.service 恢复为原始的建议.model, org.apache.cxf.message, * 。现在 org.apache.commons.configuration 上没有显示错误,但这次得到了这个错误: Unable to resolve 760.0: missing requirements [760.0] osgi.wiring.package; (osgi.wiring.package=com.twitter.util
【解决方案2】:

您需要确保 jar 已安装在 Karaf 中。 为此,您需要将 jar 包装成一个包:

osgi:install wrap:mvn:commons-configuration/commons-configuration/1.9

完成此操作后,请确保删除您对 Import-Package 所做的添加,因为它不需要。

如果您希望将依赖项与应用程序的 feature 一起安装,只需将以下元素添加到您的功能中:

<bundle>wrap:mvn:commons-configuration/commons-configuration/1.9</bundle>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-26
    • 2023-03-12
    • 2018-09-29
    • 1970-01-01
    • 2017-09-11
    • 2015-07-28
    • 2018-05-10
    • 2011-03-14
    相关资源
    最近更新 更多