You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OSGi项目集成camel-bindy组件遇Maven构建依赖缺失问题求助

解决OSGi项目中使用camel-bindy时Karaf Maven构建失败的问题

错误日志

Failed to execute goal org.apache.karaf.tooling:karaf-maven-plugin:4.0.8:assembly (karaf-assembly) on project karaf2-cxf-rest: Unable to build assembly: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=io.fabric8.quickstarts.karaf2-cxf-rest; type=osgi.bundle; version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; resolution:=mandatory [caused by: Unable to resolve io.fabric8.quickstarts.karaf2-cxf-rest/1.0.0.SNAPSHOT: missing requirement [io.fabric8.quickstarts.karaf2-cxf-rest/1.0.0.SNAPSHOT] osgi.wiring.package; filter:="(osgi.wiring.package=org.apache.camel.camel-bindy)"] -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.karaf.tooling:karaf-maven-plugin:4.0.8:assembly (karaf-assembly) on project karaf2-cxf-rest: Unable to build assembly 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) 
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:498) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.MojoExecutionException: Unable to build assembly 
at org.apache.karaf.tooling.AssemblyMojo.execute(AssemblyMojo.java:243) 
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
... 20 more 
Caused by: org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=io.fabric8.quickstarts.karaf2-cxf-rest; type=osgi.bundle; version="[1.0.0.SNAPSHOT,1.0.0.SNAPSHOT]"; resolution:=mandatory [caused by: Unable to resolve io.fabric8.quickstarts.karaf2-cxf-rest/1.0.0.SNAPSHOT: missing requirement [io.fabric8.quickstarts.karaf2-cxf-rest/1.0.0.SNAPSHOT] osgi.wiring.package; filter:="(osgi.wiring.package=org.apache.camel.camel-bindy)"] 
at org.apache.felix.resolver.ResolutionError.toException(ResolutionError.java:42) 
at org.apache.felix.resolver.ResolverImpl.doResolve(ResolverImpl.java:389) 
at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:375) 
at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:347) 
at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:216) 
at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:263) 
at org.apache.karaf.profile.assembly.Builder.resolve(Builder.java:1218) 
at org.apache.karaf.profile.assembly.Builder.startupStage(Builder.java:1009) 
at org.apache.karaf.profile.assembly.Builder.doGenerateAssembly(Builder.java:609) 
at org.apache.karaf.profile.assembly.Builder.generateAssembly(Builder.java:392) 
at org.apache.karaf.tooling.AssemblyMojo.doExecute(AssemblyMojo.java:401) 
at org.apache.karaf.tooling.AssemblyMojo.execute(AssemblyMojo.java:237) 
... 22 more

你的POM片段

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<modelVersion>4.0.0</modelVersion> 
<groupId>io.fabric8.quickstarts</groupId> 
<artifactId>karaf2-cxf-rest</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>bundle</packaging> 
<name>Fabric8 :: Quickstarts :: Kar...</name>

问题分析

从错误日志可以明确看出,OSGi解析器无法找到org.apache.camel.camel-bindy包的依赖,导致Karaf assembly构建时无法解析你的bundle。这通常是因为你没有在项目中正确引入camel-bindy的依赖,或者没有在Karaf的构建配置中包含对应的特性/bundle。

解决方案

1. 在POM中添加camel-bindy依赖

首先确保你的项目依赖中包含camel-bindy,注意版本要和你使用的Camel、Karaf版本兼容(Karaf 4.0.8通常搭配Camel 2.x系列):

<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-bindy</artifactId>
        <version>你的Camel版本号</version>
        <scope>provided</scope> <!-- 如果通过Karaf特性引入,用provided;否则用compile -->
    </dependency>
</dependencies>

同时,确保maven-bundle-plugin的配置中正确导入了camel-bindy的包(如果没有显式配置,插件会自动检测,但最好确认):

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <version>3.5.0</version> <!-- 适配Karaf 4.x的版本 -->
    <extensions>true</extensions>
    <configuration>
        <instructions>
            <Import-Package>
                org.apache.camel.bindy.*,
                *
            </Import-Package>
            <!-- 其他指令 -->
        </instructions>
    </configuration>
</plugin>

2. 在Karaf构建配置中包含camel-bindy特性

如果你使用karaf-maven-plugin构建assembly,需要在插件配置中添加camel-bindy的特性,确保它被包含在构建的Karaf实例中:

<plugin>
    <groupId>org.apache.karaf.tooling</groupId>
    <artifactId>karaf-maven-plugin</artifactId>
    <version>4.0.8</version>
    <executions>
        <execution>
            <id>karaf-assembly</id>
            <goals>
                <goal>assembly</goal>
            </goals>
            <configuration>
                <!-- 其他配置 -->
                <features>
                    <!-- 引入Camel核心特性(如果还没加) -->
                    <feature>camel-core</feature>
                    <!-- 添加camel-bindy特性 -->
                    <feature>camel-bindy</feature>
                </features>
            </configuration>
        </execution>
    </executions>
</plugin>

3. 检查版本兼容性

Karaf和Camel的版本必须匹配,Karaf 4.0.8对应的Camel版本建议使用2.18.x或2.19.x系列,避免版本不兼容导致的依赖解析问题。


内容的提问来源于stack exchange,提问作者Magick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:35:25