Java 捆绑包内具有依赖项的简单OSGi应用程序
简单的OSGi应用程序,包内有依赖项 我在和卡拉夫玩。我从编写一个简单的rest应用程序开始。 我将karaf示例作为backbond,使用rest端点运行我的第一个包非常简单,但是当我添加maven依赖项时,我遇到了一个问题。我添加了番石榴作为示例,在karaf中安装捆绑包时遇到了一个异常Java 捆绑包内具有依赖项的简单OSGi应用程序,java,osgi,apache-karaf,apache-felix,Java,Osgi,Apache Karaf,Apache Felix,简单的OSGi应用程序,包内有依赖项 我在和卡拉夫玩。我从编写一个简单的rest应用程序开始。 我将karaf示例作为backbond,使用rest端点运行我的第一个包非常简单,但是当我添加maven依赖项时,我遇到了一个问题。我添加了番石榴作为示例,在karaf中安装捆绑包时遇到了一个异常 <dependencies> ... <dependency> <groupId>com.google.guav
<dependencies>
...
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>29.0-jre</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Export-Package>org.apache.karaf.core.rest.blueprint</Export-Package>
<Import-Package>
*
</Import-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
> git clone https://github.com/YaroslavTir/osgi-jersey-hibertate
> mvn clean install
> feature:repo-add mvn:org.apache.karaf.examples/karaf-rest-core-features/LATEST/xml
> feature:install karaf-rest-core-blueprint
执行命令时出错:无法解析根:缺少需求[root]osgi.identity;identity=karaf rest核心蓝图;类型=卡拉夫特征;版本=[4.3.1.快照,4.3.1.快照];过滤器:=&osgi.identity=karaf rest core blueprinttype=karaf.featureversion>=4.3.1.SNAPSHOTversion=29.0.0!版本>=30.0.0]]
我在某个地方读到org.apache.felix.maven-bundle-plugin有一个bug,并在bundle中添加了可选的依赖项,这看起来像是真的,正如我在MANIFEST.MF/Import-Package dependency(如com.google.appengine.api)中看到的,它不应该存在。
:
我知道这应该非常简单,我只是错过了一些小但重要的细节。您的错误意味着您的bundle karaf rest core blueprint依赖于com.google.common.collect,并且无法在容器中解决此依赖关系 换句话说,你没有在卡拉夫安装番石榴
$ bundle:install -s mvn:com.google.guava/failureaccess/1.0.1
$ bundle:install -s mvn:com.google.guava/guava-29.0-jre
在真正的应用程序中,您应该创建一个安装所有依赖项/捆绑包的功能。您的错误意味着您的捆绑包karaf rest core blueprint依赖于com.google.common.collect,并且无法在容器中解析此依赖项 换句话说,你没有在卡拉夫安装番石榴
$ bundle:install -s mvn:com.google.guava/failureaccess/1.0.1
$ bundle:install -s mvn:com.google.guava/guava-29.0-jre
在真正的应用程序中,您应该创建一个功能来安装所有依赖项/捆绑包。Jérémie B,感谢您的回复。那么,我是否正确理解所有依赖项都应该通过bundle安装?如果我想使用一个没有捆绑包的库怎么办?您有三个选择:对库进行PR以添加osgi元数据,现在使用bnd很容易;使用一个为大多数OSS库(如servicemix捆绑包)提供osgi捆绑包的社区项目,或者使用wrap url处理程序将osgi元数据动态添加到任何jarJérémie B,感谢您的回复,看起来我一开始误解了如何管理依赖关系。Jérémie B,感谢您的回复。那么,我是否正确理解所有依赖项都应该通过bundle安装?如果我想使用一个没有捆绑包的库怎么办?您有三个选择:对库进行PR以添加osgi元数据,现在使用bnd很容易;使用一个为大多数OSS库(如servicemix捆绑包)提供osgi捆绑包的社区项目,或者使用wrap url处理程序将osgi元数据动态添加到任何jarJérémie B,感谢您的回复,看起来我一开始误解了如何管理依赖项。