Java 在Karaf中部署REST Servlet WAR时出现未解决的约束错误(com.sun.jdi)

Java 在Karaf中部署REST Servlet WAR时出现未解决的约束错误(com.sun.jdi),java,jersey,osgi,apache-karaf,karaf,Java,Jersey,Osgi,Apache Karaf,Karaf,我编写了一个简单的jersey Web服务(基于servlet的WAR),用于OSGIfied并部署到karaf中。该应用程序使用eclipse进行编码,并作为一个maven web项目,设计为作为WAR部署。正确编译和安装,生成war时不会出现任何错误。档案内容如下:- 请不要将此记录为其他类似问题的副本,因为我检查了这些问题,并尝试应用其中给出的一些解决方案(未成功) POM.XML <project xmlns="http://maven.apache.org/POM/4.0.0"

我编写了一个简单的jersey Web服务(基于servlet的WAR),用于OSGIfied并部署到karaf中。该应用程序使用eclipse进行编码,并作为一个maven web项目,设计为作为WAR部署。正确编译和安装,生成war时不会出现任何错误。档案内容如下:-

请不要将此记录为其他类似问题的副本,因为我检查了这些问题,并尝试应用其中给出的一些解决方案(未成功)

POM.XML

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>ione</groupId>
<artifactId>karaftest</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>karaftest Maven Webapp</name>
<url>http://maven.apache.org</url>

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
        <scope>provided</scope>
    </dependency>


    <dependency>
        <groupId>org.glassfish.jersey.containers</groupId>
        <!-- if your container implements Servlet API older than 3.0, use "jersey-container-servlet-core" -->
        <artifactId>jersey-container-servlet</artifactId>
        <version>2.22.1</version>
        <scope>compile</scope>
    </dependency>
</dependencies>
<build>
    <finalName>karaftest</finalName>
    <plugins>

        <plugin>
            <groupId>org.apache.felix</groupId>
            <artifactId>maven-bundle-plugin</artifactId>
            <extensions>true</extensions>
            <executions>
                <execution>
                    <id>bundle-manifest</id>
                    <phase>process-classes</phase>
                    <goals>
                        <goal>manifest</goal>
                    </goals>
                    <configuration>
                        <instructions>
                            <Bundle-SymbolicName>karaftest</Bundle-SymbolicName>
                            <Export-Package/>
                            <Import-Package/>
                            <Bundle-ClassPath>.,WEB-INF/classes</Bundle-ClassPath>
                            <Embed-Directory>WEB-INF/lib</Embed-Directory>
                            <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
                            <Embed-Transitive>true</Embed-Transitive>
                            <Web-ContextPath>karaftest</Web-ContextPath>
                            <Webapp-Context>karaftest</Webapp-Context>
                        </instructions>
                    </configuration>
                </execution>
            </executions>
            <configuration>
                <supportedProjectTypes>
                    <supportedProjectType>jar</supportedProjectType>
                    <supportedProjectType>bundle</supportedProjectType>
                    <supportedProjectType>war</supportedProjectType>
                </supportedProjectTypes>
                <instructions>
                    <!-- ... etc ... -->
                </instructions>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>



        <!-- Karaf stuff OSGIfy the WAR -->

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
            <configuration>
                <archive>
                    <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                </archive>
            </configuration>
        </plugin>






        <!-- OSGIfication -->

    </plugins>
</build>
我按照说明将生成的WAR复制到karaf/deploy文件夹,并运行karaf.bar服务器。它不断地在下面抛出错误

karaf.bat: Ignoring predefined value for KARAF_HOME
ERROR: Bundle karaftest [139] Error starting file:/C:/Essentials/iONE/apache-kar
af-3.0.3/apache-karaf-3.0.3/deploy/karaftest.war (org.osgi.framework.BundleExcep
tion: Unresolved constraint in bundle karaftest [139]: Unable to resolve 139.0:
missing requirement [139.0] osgi.wiring.package; (osgi.wiring.package=com.sun.jd
i))
org.osgi.framework.BundleException: Unresolved constraint in bundle karaftest [1
39]: Unable to resolve 139.0: missing requirement [139.0] osgi.wiring.package; (
osgi.wiring.package=com.sun.jdi)
        at org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:397
4)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:2037)
        at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1291)

        at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStart
LevelImpl.java:304)
        at java.lang.Thread.run(Thread.java:745)
我不知道它试图在哪里解析com.sun.jdi。我知道这是一个特定于专有sun类的包。我试图解决这个问题,但没有成功

  • 使用“!”通过maven bundle插件排除此特定包
  • 导出此包,使其可用于容器,如注释中所述
  • 我对OSGI宇宙是全新的(就像一天以前一样),所以我真的不知道为什么部署一场简单的战争如此困难。另外,我不知道它是从哪里从我的与com.sun.jdi相关的应用程序WAR中获取信息的。我怀疑它是否是作为jersey的一部分解析的任何jar的可传递依赖jar

    非常感谢您的帮助(如果您在湾区,请喝杯啤酒)。谢谢

    更新

    通过将POM.XML更改为导入包更新了MANIFEST.MF。在部署到卡拉夫时仍然会遇到与战争相同的异常。在manifest.mf中可以看到com.sun.jdi正在被导入

    更新MANIFEST.MF

    Manifest-Version: 1.0
    Bnd-LastModified: 1455065767920
    Build-Jdk: 1.8.0_45
    Built-By: nish
    Bundle-ClassPath: .,WEB-INF/classes,WEB-INF/lib/jersey-container-servlet
     -2.22.1.jar,WEB-INF/lib/jersey-container-servlet-core-2.22.1.jar,WEB-IN
     F/lib/javax.inject-2.4.0-b31.jar,WEB-INF/lib/jersey-common-2.22.1.jar,W
     EB-INF/lib/javax.annotation-api-1.2.jar,WEB-INF/lib/jersey-guava-2.22.1
     .jar,WEB-INF/lib/hk2-api-2.4.0-b31.jar,WEB-INF/lib/hk2-utils-2.4.0-b31.
     jar,WEB-INF/lib/aopalliance-repackaged-2.4.0-b31.jar,WEB-INF/lib/hk2-lo
     cator-2.4.0-b31.jar,WEB-INF/lib/javassist-3.18.1-GA.jar,WEB-INF/lib/osg
     i-resource-locator-1.0.1.jar,WEB-INF/lib/jersey-server-2.22.1.jar,WEB-I
     NF/lib/jersey-client-2.22.1.jar,WEB-INF/lib/jersey-media-jaxb-2.22.1.ja
     r,WEB-INF/lib/validation-api-1.1.0.Final.jar,WEB-INF/lib/javax.ws.rs-ap
     i-2.0.1.jar
    Bundle-ManifestVersion: 2
    Bundle-Name: karaftest Maven Webapp
    Bundle-SymbolicName: karaftest
    Bundle-Version: 0.0.1.SNAPSHOT
    Created-By: Apache Maven Bundle Plugin
    Embed-Dependency: *;scope=compile|runtime
    Embed-Directory: WEB-INF/lib
    Embed-Transitive: true
    Embedded-Artifacts: WEB-INF/lib/jersey-container-servlet-2.22.1.jar;g="o
     rg.glassfish.jersey.containers";a="jersey-container-servlet";v="2.22.1"
     ,WEB-INF/lib/jersey-container-servlet-core-2.22.1.jar;g="org.glassfish.
     jersey.containers";a="jersey-container-servlet-core";v="2.22.1",WEB-INF
     /lib/javax.inject-2.4.0-b31.jar;g="org.glassfish.hk2.external";a="javax
     .inject";v="2.4.0-b31",WEB-INF/lib/jersey-common-2.22.1.jar;g="org.glas
     sfish.jersey.core";a="jersey-common";v="2.22.1",WEB-INF/lib/javax.annot
     ation-api-1.2.jar;g="javax.annotation";a="javax.annotation-api";v="1.2"
     ,WEB-INF/lib/jersey-guava-2.22.1.jar;g="org.glassfish.jersey.bundles.re
     packaged";a="jersey-guava";v="2.22.1",WEB-INF/lib/hk2-api-2.4.0-b31.jar
     ;g="org.glassfish.hk2";a="hk2-api";v="2.4.0-b31",WEB-INF/lib/hk2-utils-
     2.4.0-b31.jar;g="org.glassfish.hk2";a="hk2-utils";v="2.4.0-b31",WEB-INF
     /lib/aopalliance-repackaged-2.4.0-b31.jar;g="org.glassfish.hk2.external
     ";a="aopalliance-repackaged";v="2.4.0-b31",WEB-INF/lib/hk2-locator-2.4.
     0-b31.jar;g="org.glassfish.hk2";a="hk2-locator";v="2.4.0-b31",WEB-INF/l
     ib/javassist-3.18.1-GA.jar;g="org.javassist";a="javassist";v="3.18.1-GA
     ",WEB-INF/lib/osgi-resource-locator-1.0.1.jar;g="org.glassfish.hk2";a="
     osgi-resource-locator";v="1.0.1",WEB-INF/lib/jersey-server-2.22.1.jar;g
     ="org.glassfish.jersey.core";a="jersey-server";v="2.22.1",WEB-INF/lib/j
     ersey-client-2.22.1.jar;g="org.glassfish.jersey.core";a="jersey-client"
     ;v="2.22.1",WEB-INF/lib/jersey-media-jaxb-2.22.1.jar;g="org.glassfish.j
     ersey.media";a="jersey-media-jaxb";v="2.22.1",WEB-INF/lib/validation-ap
     i-1.1.0.Final.jar;g="javax.validation";a="validation-api";v="1.1.0.Fina
     l",WEB-INF/lib/javax.ws.rs-api-2.0.1.jar;g="javax.ws.rs";a="javax.ws.rs
     -api";v="2.0.1"
    Import-Package: com.sun.jdi,com.sun.jdi.connect,com.sun.jdi.event,com.su
     n.jdi.request,javax.activation,javax.imageio,javax.imageio.spi,javax.im
     ageio.stream,javax.jws,javax.management,javax.naming,javax.net.ssl,java
     x.persistence,javax.servlet,javax.servlet.annotation,javax.servlet.http
     ,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.ada
     pters,javax.xml.datatype,javax.xml.namespace,javax.xml.parsers,javax.xm
     l.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.transfor
     m.sax,javax.xml.transform.stream,javax.xml.validation,javax.xml.ws,jers
     ey.repackaged.com.google.common.cache.LocalCache.jersey.repackaged.com.
     google.common.cache,jersey.repackaged.com.google.common.cache.LocalCach
     e.jersey.repackaged.com.google.common.cache.LocalCache$jersey.repackage
     d.com.google.common.cache,jersey.repackaged.com.google.common.collect.A
     bstractMapBasedMultimap.jersey.repackaged.com.google.common.collect,jer
     sey.repackaged.com.google.common.collect.AbstractMapBasedMultimap.jerse
     y.repackaged.com.google.common.collect.AbstractMapBasedMultimap$Wrapped
     Collection.jersey.repackaged.com.google.common.collect,jersey.repackage
     d.com.google.common.collect.AbstractMultimap.jersey.repackaged.com.goog
     le.common.collect,jersey.repackaged.com.google.common.collect.FilteredK
     eyMultimap.jersey.repackaged.com.google.common.collect,jersey.repackage
     d.com.google.common.collect.ImmutableMultimap.jersey.repackaged.com.goo
     gle.common.collect,jersey.repackaged.com.google.common.collect.MapMaker
     InternalMap.jersey.repackaged.com.google.common.collect,jersey.repackag
     ed.com.google.common.collect.MapMakerInternalMap.jersey.repackaged.com.
     google.common.collect.MapMakerInternalMap$jersey.repackaged.com.google.
     common.collect,jersey.repackaged.com.google.common.collect.Maps$Filtere
     dEntryMap.jersey.repackaged.com.google.common.collect,jersey.repackaged
     .com.google.common.collect.StandardTable.jersey.repackaged.com.google.c
     ommon.collect,org.apache.log4j;version="[1.2,2)",org.osgi.framework,org
     .w3c.dom,org.xml.sax,org.xml.sax.helpers,sun.misc
    Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Tool: Bnd-3.0.0.201509101326
    Web-ContextPath: karaftest
    Webapp-Context: karaftest
    

    我没有导入软件包。如果查看pom.xml,可以看到空元素。添加它也没有任何好处,因为我在karaf控制台中遇到了相同的异常。错误消息不能来自您列出的包。。。您的捆绑包没有导入包(因为出于某种原因,您已经关闭了所有导入…这是个坏主意!)。但错误消息表示其中一个导入无法解析。所以,这可能是您的捆绑包的早期版本?我关闭了导入,只是想看看这是否是导致问题的原因。我甚至试着忽略导入,但没有任何效果。在整个调试过程中,我多次重新启动了karaf,因此我认为它每次都会刷新包。此外,每次更改WAR时,我都会手动将WAR从maven目标复制到karaf/deploy。关闭导入肯定会消除关于无法解决导入的错误!但它会导致其他错误,例如
    NoClassDefFoundError
    ,因为您的捆绑包将无法再加载其任何依赖项。不幸的是,我无法解释为什么您认为正在运行的bundle实际上不是正在运行的bundle。感谢您的输入。这是一个新的karaf安装,这场战争是我第一次尝试karaf,所以我确信没有其他捆绑包涉及。根据您确认的推断,这个问题可能与我的karaf运行时有关,而不是与我正在部署的战争有关吗?。
    Manifest-Version: 1.0
    Bnd-LastModified: 1455065767920
    Build-Jdk: 1.8.0_45
    Built-By: nish
    Bundle-ClassPath: .,WEB-INF/classes,WEB-INF/lib/jersey-container-servlet
     -2.22.1.jar,WEB-INF/lib/jersey-container-servlet-core-2.22.1.jar,WEB-IN
     F/lib/javax.inject-2.4.0-b31.jar,WEB-INF/lib/jersey-common-2.22.1.jar,W
     EB-INF/lib/javax.annotation-api-1.2.jar,WEB-INF/lib/jersey-guava-2.22.1
     .jar,WEB-INF/lib/hk2-api-2.4.0-b31.jar,WEB-INF/lib/hk2-utils-2.4.0-b31.
     jar,WEB-INF/lib/aopalliance-repackaged-2.4.0-b31.jar,WEB-INF/lib/hk2-lo
     cator-2.4.0-b31.jar,WEB-INF/lib/javassist-3.18.1-GA.jar,WEB-INF/lib/osg
     i-resource-locator-1.0.1.jar,WEB-INF/lib/jersey-server-2.22.1.jar,WEB-I
     NF/lib/jersey-client-2.22.1.jar,WEB-INF/lib/jersey-media-jaxb-2.22.1.ja
     r,WEB-INF/lib/validation-api-1.1.0.Final.jar,WEB-INF/lib/javax.ws.rs-ap
     i-2.0.1.jar
    Bundle-ManifestVersion: 2
    Bundle-Name: karaftest Maven Webapp
    Bundle-SymbolicName: karaftest
    Bundle-Version: 0.0.1.SNAPSHOT
    Created-By: Apache Maven Bundle Plugin
    Embed-Dependency: *;scope=compile|runtime
    Embed-Directory: WEB-INF/lib
    Embed-Transitive: true
    Embedded-Artifacts: WEB-INF/lib/jersey-container-servlet-2.22.1.jar;g="o
     rg.glassfish.jersey.containers";a="jersey-container-servlet";v="2.22.1"
     ,WEB-INF/lib/jersey-container-servlet-core-2.22.1.jar;g="org.glassfish.
     jersey.containers";a="jersey-container-servlet-core";v="2.22.1",WEB-INF
     /lib/javax.inject-2.4.0-b31.jar;g="org.glassfish.hk2.external";a="javax
     .inject";v="2.4.0-b31",WEB-INF/lib/jersey-common-2.22.1.jar;g="org.glas
     sfish.jersey.core";a="jersey-common";v="2.22.1",WEB-INF/lib/javax.annot
     ation-api-1.2.jar;g="javax.annotation";a="javax.annotation-api";v="1.2"
     ,WEB-INF/lib/jersey-guava-2.22.1.jar;g="org.glassfish.jersey.bundles.re
     packaged";a="jersey-guava";v="2.22.1",WEB-INF/lib/hk2-api-2.4.0-b31.jar
     ;g="org.glassfish.hk2";a="hk2-api";v="2.4.0-b31",WEB-INF/lib/hk2-utils-
     2.4.0-b31.jar;g="org.glassfish.hk2";a="hk2-utils";v="2.4.0-b31",WEB-INF
     /lib/aopalliance-repackaged-2.4.0-b31.jar;g="org.glassfish.hk2.external
     ";a="aopalliance-repackaged";v="2.4.0-b31",WEB-INF/lib/hk2-locator-2.4.
     0-b31.jar;g="org.glassfish.hk2";a="hk2-locator";v="2.4.0-b31",WEB-INF/l
     ib/javassist-3.18.1-GA.jar;g="org.javassist";a="javassist";v="3.18.1-GA
     ",WEB-INF/lib/osgi-resource-locator-1.0.1.jar;g="org.glassfish.hk2";a="
     osgi-resource-locator";v="1.0.1",WEB-INF/lib/jersey-server-2.22.1.jar;g
     ="org.glassfish.jersey.core";a="jersey-server";v="2.22.1",WEB-INF/lib/j
     ersey-client-2.22.1.jar;g="org.glassfish.jersey.core";a="jersey-client"
     ;v="2.22.1",WEB-INF/lib/jersey-media-jaxb-2.22.1.jar;g="org.glassfish.j
     ersey.media";a="jersey-media-jaxb";v="2.22.1",WEB-INF/lib/validation-ap
     i-1.1.0.Final.jar;g="javax.validation";a="validation-api";v="1.1.0.Fina
     l",WEB-INF/lib/javax.ws.rs-api-2.0.1.jar;g="javax.ws.rs";a="javax.ws.rs
     -api";v="2.0.1"
    Import-Package: com.sun.jdi,com.sun.jdi.connect,com.sun.jdi.event,com.su
     n.jdi.request,javax.activation,javax.imageio,javax.imageio.spi,javax.im
     ageio.stream,javax.jws,javax.management,javax.naming,javax.net.ssl,java
     x.persistence,javax.servlet,javax.servlet.annotation,javax.servlet.http
     ,javax.xml.bind,javax.xml.bind.annotation,javax.xml.bind.annotation.ada
     pters,javax.xml.datatype,javax.xml.namespace,javax.xml.parsers,javax.xm
     l.stream,javax.xml.transform,javax.xml.transform.dom,javax.xml.transfor
     m.sax,javax.xml.transform.stream,javax.xml.validation,javax.xml.ws,jers
     ey.repackaged.com.google.common.cache.LocalCache.jersey.repackaged.com.
     google.common.cache,jersey.repackaged.com.google.common.cache.LocalCach
     e.jersey.repackaged.com.google.common.cache.LocalCache$jersey.repackage
     d.com.google.common.cache,jersey.repackaged.com.google.common.collect.A
     bstractMapBasedMultimap.jersey.repackaged.com.google.common.collect,jer
     sey.repackaged.com.google.common.collect.AbstractMapBasedMultimap.jerse
     y.repackaged.com.google.common.collect.AbstractMapBasedMultimap$Wrapped
     Collection.jersey.repackaged.com.google.common.collect,jersey.repackage
     d.com.google.common.collect.AbstractMultimap.jersey.repackaged.com.goog
     le.common.collect,jersey.repackaged.com.google.common.collect.FilteredK
     eyMultimap.jersey.repackaged.com.google.common.collect,jersey.repackage
     d.com.google.common.collect.ImmutableMultimap.jersey.repackaged.com.goo
     gle.common.collect,jersey.repackaged.com.google.common.collect.MapMaker
     InternalMap.jersey.repackaged.com.google.common.collect,jersey.repackag
     ed.com.google.common.collect.MapMakerInternalMap.jersey.repackaged.com.
     google.common.collect.MapMakerInternalMap$jersey.repackaged.com.google.
     common.collect,jersey.repackaged.com.google.common.collect.Maps$Filtere
     dEntryMap.jersey.repackaged.com.google.common.collect,jersey.repackaged
     .com.google.common.collect.StandardTable.jersey.repackaged.com.google.c
     ommon.collect,org.apache.log4j;version="[1.2,2)",org.osgi.framework,org
     .w3c.dom,org.xml.sax,org.xml.sax.helpers,sun.misc
    Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
    Tool: Bnd-3.0.0.201509101326
    Web-ContextPath: karaftest
    Webapp-Context: karaftest