Maven 无法在bundle osgi.willing.package=org.apache.commons.configuration version>=1.9.0中启动bundle Unresolved约束!版本>=2.0.0

Maven 无法在bundle osgi.willing.package=org.apache.commons.configuration version>=1.9.0中启动bundle Unresolved约束!版本>=2.0.0,maven,apache-camel,osgi,apache-karaf,karaf,Maven,Apache Camel,Osgi,Apache Karaf,Karaf,我正在尝试使用以下特性安装最新版本的apache camel应用程序:install on Karaf 此新版本具有org.apache.commons.configuration 1.9版的依赖项 但是得到下面的错误 错误: Error executing command: Could not start bundle mvn: in feature(s)<package> : Unresolved constraint in bundle <bundle> [414]

我正在尝试使用以下特性安装最新版本的apache camel应用程序:install on Karaf 此新版本具有org.apache.commons.configuration 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>
        <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>
但仍然无法解决。谁能帮我解决这个问题


谢谢

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

因为您将它列在导入包下,所以您希望它是第一个。为此,您需要在导出org.apache.commons.configuration的容器中部署另一个bundle


如果您想将其作为简单依赖项嵌入到同一个捆绑包中,则必须将其从导入包中排除!作为前缀,可能使用嵌入依赖项指令,如本答案中的示例:

您需要确保jar安装在Karaf中。 为了做到这一点,您需要将jar打包为一个包:

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

完成此操作后,请确保删除对导入包所做的添加,因为它不是必需的

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

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

将此捆绑包添加到您自己的功能文件中,以便将其与您的应用程序一起安装。嗨@ClausIbsen,请您解释一下。。我不熟悉阿帕奇骆驼和卡拉夫。哪个包裹?如何添加到自己的功能文件中?谢谢你输入了什么命令功能:install来安装你的应用程序。嗨@burki,谢谢你的回复。最初,我只是为配置添加了一个。即使在那时,也是同样的错误。然后根据几个stackoverflow线程,我将其包含在。。但即使这样也不起作用。所以如果我加前缀!或者移除并使用,它会工作吗?只要在Maven中创建一个构建时依赖项,它对运行时没有影响。您需要确保该捆绑包实际包含在运行时应用程序中。对于未解析的导入,使用“处处嵌入依赖项”并不是一个通用的解决方案,因为它会导致每个捆绑包都包含相同API的副本。这会导致非常大的捆绑包无法相互通信。导入包的默认值为*。这意味着:从同一osgi容器中的其他捆绑包导入捆绑包所包含的包所需的所有包。这就解释了为什么只有通过添加依赖项才能得到相同的错误。因此,如果它不是由容器中的另一个bundle提供的,您必须将其从导入包中排除,并将其嵌入到您的bundle中。您可以通过使用嵌入依赖项来实现这一点。例如,您可以使用*嵌入所有编译时依赖项;scope=compile.Hi@burki,我尝试了从中删除org.apache.commons.configuration并使用org.apache.cxf.service.model、org.apache.cxf.message、*还原回原始配置的建议。现在,org.apache.commons.configuration上没有显示错误,但这次得到了这个错误:无法解决760.0:缺少需求[760.0]osgi.willing.package;osgi.willing.package=com.twitter.util