jersey错误java.lang.CompatibleClassChangeError:在jetty embedded中实现类
运行jersey 2.5.1和嵌入jetty jetty-9.1.2.v20140210 我想要一个嵌入式jetty服务器,能够支持servlet 3x和jersey。我知道我的jetty实例充当servlet处理程序和静态文件处理程序。但是,我得到了以下详细信息: java.lang.CompatibleClassChangeError:实现类 我确信它与cglib/asm有关,但不确定如何修复它 pom如下所示:jersey错误java.lang.CompatibleClassChangeError:在jetty embedded中实现类,jersey,embedded-jetty,Jersey,Embedded Jetty,运行jersey 2.5.1和嵌入jetty jetty-9.1.2.v20140210 我想要一个嵌入式jetty服务器,能够支持servlet 3x和jersey。我知道我的jetty实例充当servlet处理程序和静态文件处理程序。但是,我得到了以下详细信息: java.lang.CompatibleClassChangeError:实现类 我确信它与cglib/asm有关,但不确定如何修复它 pom如下所示: <project xmlns="http://maven.apache.
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.test</groupId>
<artifactId>embedjettyX</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>embedjettyX</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<skipTests>true</skipTests>
<jersey.version>2.5.1</jersey.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-util</artifactId>
<version>3.1</version>
</dependency>-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<type>jar</type>
</dependency>
<!-- <dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>-->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-deploy</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
</dependencies>
</project>
@ApplicationPath("/")
public class Application extends ResourceConfig {
public Application() {
packages("quintes.rest");
}
}
public class App {
public static void main(String[] args) {
Server server = new Server(8081);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");
server.setHandler(context);
ServletHolder servletHolder = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/*");
servletHolder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.PackagesResourceConfig");
servletHolder.setInitParameter("com.sun.jersey.config.property.packages", "quintes.rest");
ServletHolder staticServlet = context.addServlet(DefaultServlet.class, "/*");
staticServlet.setInitParameter("resourceBase", "src/main/webapp");
staticServlet.setInitParameter("pathInfoOnly", "true");
try {
server.start();
server.join();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
}
其余资源:
@Path("test")
public class restresource {
@GET
@Produces({MediaType.APPLICATION_JSON})
public Response getDefault() {
return Response.ok("test returned").build();
}
}
main()是这样的:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.test</groupId>
<artifactId>embedjettyX</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>embedjettyX</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<skipTests>true</skipTests>
<jersey.version>2.5.1</jersey.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey</groupId>
<artifactId>jersey-bom</artifactId>
<version>${jersey.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
<scope>test</scope>
</dependency>
<!-- <dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>asm</groupId>
<artifactId>asm-util</artifactId>
<version>3.1</version>
</dependency>-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>7.0</version>
<type>jar</type>
</dependency>
<!-- <dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
</dependency>-->
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-deploy</artifactId>
<version>9.1.2.v20140210</version>
</dependency>
</dependencies>
</project>
@ApplicationPath("/")
public class Application extends ResourceConfig {
public Application() {
packages("quintes.rest");
}
}
public class App {
public static void main(String[] args) {
Server server = new Server(8081);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
context.setContextPath("/");
server.setHandler(context);
ServletHolder servletHolder = context.addServlet(org.glassfish.jersey.servlet.ServletContainer.class, "/api/*");
servletHolder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass",
"com.sun.jersey.api.core.PackagesResourceConfig");
servletHolder.setInitParameter("com.sun.jersey.config.property.packages", "quintes.rest");
ServletHolder staticServlet = context.addServlet(DefaultServlet.class, "/*");
staticServlet.setInitParameter("resourceBase", "src/main/webapp");
staticServlet.setInitParameter("pathInfoOnly", "true");
try {
server.start();
server.join();
} catch (Throwable t) {
t.printStackTrace(System.err);
}
}
}
但是,我得到了作为堆栈跟踪的一部分提到的错误:
2014-06-23 09:26:49.502:WARN:oejs.ServletHandler:qtp28971452-13: Error for /api/
java.lang.IncompatibleClassChangeError: Implementing class
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875)
at org.glassfish.jersey.server.ResourceConfig._getClasses(ResourceConfig.java:840)
at org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1171)
at org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.<init>(ResourceConfig.java:1144)
at org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:299)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:311)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
at javax.servlet.GenericServlet.init(GenericServlet.java:244)
at org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:561)
at org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:424)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:690)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
at org.eclipse.jetty.server.Server.handle(Server.java:459)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
at org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
at java.lang.Thread.run(Thread.java:744)
2014-06-2309:26:49.502:警告:oejs.ServletHandler:qtp28971452-13:/api的错误/
java.lang.CompatibleClassChangeError:实现类
位于java.lang.ClassLoader.defineClass1(本机方法)
位于java.lang.ClassLoader.defineClass(ClassLoader.java:800)
位于java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
位于java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
在java.net.URLClassLoader.access$100(URLClassLoader.java:71)
在java.net.URLClassLoader$1.run(URLClassLoader.java:361)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
位于org.glassfish.jersey.server.ResourceConfig.scanClasses(ResourceConfig.java:875)
位于org.glassfish.jersey.server.ResourceConfig.\u getClasses(ResourceConfig.java:840)
位于org.glassfish.jersey.server.ResourceConfig.getClasses(ResourceConfig.java:755)
位于org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1171)
位于org.glassfish.jersey.server.ResourceConfig$RuntimeConfig.(ResourceConfig.java:1144)
位于org.glassfish.jersey.server.ResourceConfig.createRuntimeConfig(ResourceConfig.java:1140)
位于org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:299)
位于org.glassfish.jersey.servlet.WebComponent(WebComponent.java:311)
位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:169)
位于org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:359)
位于javax.servlet.GenericServlet.init(GenericServlet.java:244)
位于org.eclipse.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:561)
位于org.eclipse.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:424)
位于org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:690)
位于org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
位于org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1112)
位于org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:479)
位于org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1046)
位于org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
位于org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
位于org.eclipse.jetty.server.server.handle(server.java:459)
位于org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:281)
位于org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:232)
位于org.eclipse.jetty.io.AbstractConnection$1.run(AbstractConnection.java:505)
位于org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:607)
位于org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:536)
运行(Thread.java:744)
我做错了什么
提前谢谢我也有类似的问题。Java8、Groovy1.8.6、Ubuntu
16.04.1LTS
。我猜我只需要搞乱泽西图书馆的版本。