ClassNotFoundException:com.sun.jersey.spi.container.servlet.ServletContainer
ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
大家好,我是 maven 和 webapps 的新手,所以请多多包涵。
我已经完成了堆栈溢出中的大多数解决方案,例如
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
但是我还是无法解决这个问题。
我正在使用 jersey lib 版本 1.18.1
而且我能够成功导入 com.sun.jersey.spi.container.servlet.ServletContainer(试图确保它在构建路径的范围内)
我已经在 git https://github.com/varuntewari/Restful-API 中发布了我的示例项目
你能帮我找出问题所在吗?
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5253)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5543)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
有几件事。首先是 ClassNotFoundExcetion
的问题。 class 在 jersey-servlet
罐子里。查看构建的 .war
文件,所有 jar 都构建到 war。因此,如果您手动部署 war 它应该可以工作。
这是我在 Eclipse 用户中经常遇到的问题。我不知道您是否在使用 Eclipse,我发现,在出现问题的情况下,Eclipse 不会将实际的 war 部署到服务器,而是创建服务器的内部实例,并且部署项目工件而不是实际的 war。在这种情况下,它不会加载罐子。
作为完整性检查,您可以添加此 jetty-maven-plugin
。我一直用它来开发
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.6.v20141205</version>
</plugin>
...
</plugins>
然后从命令行,您可以运行 mvn jetty:run
。这会将您的应用程序部署到由 Maven 创建的嵌入式 Jetty 实例。我用你的项目测试过它并且工作正常。
第二件事是依赖关系。您需要决定要使用哪个版本的 Jersey,1.x
版本还是 2.x
版本。无论你选择哪个,你都应该摆脱所有其他版本的工件。
对于你当前的项目,假设你想使用 Jersey 1.x,你应该在你当前的项目中去掉这两个。
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.0</version>
</dependency>
删除这两个和 运行 Jetty 插件应该可以正常工作。至于从 IDE 尝试 运行 它,我不确定如何解决该问题。
好像是版本问题。只需将 pom 中使用的 asm 版本从 3.3.1 更改为 3.1 即可。
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
而不是
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
所以最后我让它与 Jboss 一起工作。如果其他人面临这个问题并且不想使用码头(我在开发阶段仍然使用它)。
右键单击您的 eclipse 项目属性 -> 部署程序集 -> 添加 -> Java 构建路径条目 -> Maven 依赖项 -> 完成。
全新安装 Maven 构建。将 war 文件复制到 Jboss 独立部署文件夹。
大家好,我是 maven 和 webapps 的新手,所以请多多包涵。 我已经完成了堆栈溢出中的大多数解决方案,例如 java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
但是我还是无法解决这个问题。 我正在使用 jersey lib 版本 1.18.1 而且我能够成功导入 com.sun.jersey.spi.container.servlet.ServletContainer(试图确保它在构建路径的范围内)
我已经在 git https://github.com/varuntewari/Restful-API 中发布了我的示例项目 你能帮我找出问题所在吗?
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1854)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1703)
at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1087)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5253)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5543)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
有几件事。首先是 ClassNotFoundExcetion
的问题。 class 在 jersey-servlet
罐子里。查看构建的 .war
文件,所有 jar 都构建到 war。因此,如果您手动部署 war 它应该可以工作。
这是我在 Eclipse 用户中经常遇到的问题。我不知道您是否在使用 Eclipse,我发现,在出现问题的情况下,Eclipse 不会将实际的 war 部署到服务器,而是创建服务器的内部实例,并且部署项目工件而不是实际的 war。在这种情况下,它不会加载罐子。
作为完整性检查,您可以添加此 jetty-maven-plugin
。我一直用它来开发
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.6.v20141205</version>
</plugin>
...
</plugins>
然后从命令行,您可以运行 mvn jetty:run
。这会将您的应用程序部署到由 Maven 创建的嵌入式 Jetty 实例。我用你的项目测试过它并且工作正常。
第二件事是依赖关系。您需要决定要使用哪个版本的 Jersey,1.x
版本还是 2.x
版本。无论你选择哪个,你都应该摆脱所有其他版本的工件。
对于你当前的项目,假设你想使用 Jersey 1.x,你应该在你当前的项目中去掉这两个。
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.0</version>
</dependency>
删除这两个和 运行 Jetty 插件应该可以正常工作。至于从 IDE 尝试 运行 它,我不确定如何解决该问题。
好像是版本问题。只需将 pom 中使用的 asm 版本从 3.3.1 更改为 3.1 即可。
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.1</version>
</dependency>
而不是
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
所以最后我让它与 Jboss 一起工作。如果其他人面临这个问题并且不想使用码头(我在开发阶段仍然使用它)。 右键单击您的 eclipse 项目属性 -> 部署程序集 -> 添加 -> Java 构建路径条目 -> Maven 依赖项 -> 完成。 全新安装 Maven 构建。将 war 文件复制到 Jboss 独立部署文件夹。