Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 捆绑包内具有依赖项的简单OSGi应用程序_Java_Osgi_Apache Karaf_Apache Felix - Fatal编程技术网

Java 捆绑包内具有依赖项的简单OSGi应用程序

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

简单的OSGi应用程序,包内有依赖项

我在和卡拉夫玩。我从编写一个简单的rest应用程序开始。

我将karaf示例作为backbond,使用rest端点运行我的第一个包非常简单,但是当我添加maven依赖项时,我遇到了一个问题。我添加了番石榴作为示例,在karaf中安装捆绑包时遇到了一个异常

 <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,感谢您的回复,看起来我一开始误解了如何管理依赖项。