嗨,大家好,我是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)
答案 0 :(得分:2)
所以有几件事情。首先是ClassNotFoundExcetion
的问题。该类位于jersey-servlet
jar中。查看构建的.war
文件,所有的jar都是为了战争而构建的。因此,如果您手动部署战争,它应该工作。
这是我在Eclipse用户中看到很多问题。我不知道你是否在使用Eclipse,我已经弄清楚的是,在问题的情况下,Eclipse并没有将实际的战争部署到服务器,而是创建了服务器的内部实例,部署项目工件而不是实际的战争。在这种情况下,它不会加载罐子。
作为完整性检查,您可以添加此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实例。我测试了你的项目并且工作正常。
第二件事是依赖。您需要确定要用户的泽西岛版本,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运行它,我不知道如何解决这个问题。
答案 1 :(得分:1)
所以最后我让它与Jboss合作。如果其他人正面临这个问题并且不想使用码头(我仍然在开发阶段使用它)。 右键单击您的eclipse项目Properties - &gt;部署组件 - &gt;添加 - &gt; Java构建路径条目 - &gt; Maven依赖关系 - &gt;完。 清洁安装maven构建。将war文件复制到Jboss独立部署文件夹。
答案 2 :(得分:0)
似乎有版本问题。只需将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>