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