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
相关产品推荐
相关产品推荐

