Apache Karaf-无法解析根:缺少需求-原因:无法解析java api

Apache Karaf-无法解析根:缺少需求-原因:无法解析java api,java,osgi,apache-karaf,Java,Osgi,Apache Karaf,我在Linux Centos 7服务器上运行ApacheKaraf4.0.1 我得到以下错误: org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=travellinck-osgi; type=karaf.feature; version="[1.0.4,1.0.4]"; fi

我在Linux Centos 7服务器上运行ApacheKaraf4.0.1

我得到以下错误:

org.osgi.service.resolver.ResolutionException: Unable to resolve root: missing requirement [root] osgi.identity; osgi.identity=travellinck-osgi; type=karaf.feature; version="[1.0.4,1.0.4]"; filter:="(&(osgi.identity=travellinck-osgi)(type=karaf.feature)(version>=1.0.4)(version<=1.0.4))" [caused by: Unable to resolve travellinck-osgi/1.0.4: missing requirement [travellinck-osgi/1.0.4] osgi.identity; osgi.identity=com.travellinck.transIT.java-api; type=osgi.bundle; version="[1.153.0,1.153.0]"; resolution:=mandatory [caused by: Unable to resolve com.travellinck.transIT.java-api/1.153.0: missing requirement [com.travellinck.transIT.java-api/1.153.0] osgi.wiring.package; filter:="(&(osgi.wiring.package=javax.jws)(version>=1.1.0)(!(version>=2.0.0)))"]]
    at org.apache.felix.resolver.Candidates.populateResource(Candidates.java:314)[org.apache.felix.framework-5.0.1.jar:] 
在其中一个模块中,POM中包含以下内容:

<modelVersion>4.0.0</modelVersion>
<groupId>com.travellinck.integration.vocabulary</groupId>
<artifactId>com.travellinck.transIT.java-api</artifactId>
<version>1.153.0</version>
<name>${bundle.name} ${project.version} [osgi]</name>
<packaging>bundle</packaging>
<description>Comprehensive travel services vocabulary</description>
4.0.0
com.travellinck.integration.词汇表
com.travellinck.transIT.java-api
1.153.0
${bundle.name}${project.version}[osgi]
捆
综合旅游服务词汇

我通过从pom中删除这些依赖项解决了这个问题:

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.ws</groupId>
        <artifactId>jaxws-api</artifactId>
        <version>2.2.7</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>jaxws-ri</artifactId>
        <version>2.2.7</version>
        <type>pom</type>
    </dependency>
    <dependency>
        <groupId>javax.jws</groupId>
        <artifactId>javax.jws-api</artifactId>
        <version>1.1</version>
    </dependency>

javax.xml.bind
jaxb api
2.2.7
javax.xml.ws
JAXWSAPI
2.2.7
com.sun.xml.ws
jaxws-ri
2.2.7
聚甲醛
javax.jws
javax.jws-api
1.1

在错误的结尾,它说:“嘿,我错过了这个包:javax.jws,我希望它的版本>=1.1,但不是优于2.0.0”

您通过删除所有这些依赖项修复了该问题

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.2.7</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>javax.jws-api</artifactId>
    <version>1.1</version>
</dependency>

这意味着“我是1.1.0版javax.jws包的导出者”。如果您安装了它,您的另一个捆绑包将能够找到该软件包。

错误表明OSGi环境中没有提供javax.jws的捆绑包,您可以执行一个类| grep-i javax.jws吗?
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>javax.xml.ws</groupId>
    <artifactId>jaxws-api</artifactId>
    <version>2.2.7</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-ri</artifactId>
    <version>2.2.7</version>
    <type>pom</type>
</dependency>
<dependency>
    <groupId>javax.jws</groupId>
    <artifactId>javax.jws-api</artifactId>
    <version>1.1</version>
</dependency>
Export-Package: javax.jws;version="1.1.0",javax.jws.soap;version="1.1.0"