Tomcat无法加载位于依赖项jar中的类?
我在webapp A的web.xml中定义了Jersey,但是ResourceConfig和相关类位于jar B中,在webapp A的pom.xml文件中作为依赖项引用 因此,web应用程序A的web.xml包含以下部分:Tomcat无法加载位于依赖项jar中的类?,tomcat,jersey,tomcat7,maven-3,jersey-2.0,Tomcat,Jersey,Tomcat7,Maven 3,Jersey 2.0,我在webapp A的web.xml中定义了Jersey,但是ResourceConfig和相关类位于jar B中,在webapp A的pom.xml文件中作为依赖项引用 因此,web应用程序A的web.xml包含以下部分: <servlet> <servlet-name>jersey-servlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.Servlet
<servlet>
<servlet-name>jersey-servlet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.jar.b.CustomResourceConfig</param-value>
</init-param>
...
</servlet>
我可以从webapp A访问JARB中的类而不会出现问题,因为它是一个依赖项。但是Jersey无法加载web.xml中配置的ResourceConfig,找不到类:
java.lang.ClassNotFoundException: com.jar.b.CustomResourceConfig
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:407)
at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:397)
at java.security.AccessController.doPrivileged(Native Method)
at org.glassfish.jersey.servlet.WebComponent.createResourceConfig(WebComponent.java:453)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:301)
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:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5198)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5481)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
我试图使用Tomcat7服务器从Eclipse运行此安装程序,但如果直接将其部署到Tomcat中,也会失败。我导出了war并检查了jar是否位于WEB-INF/lib下的正确位置
为什么泽西岛找不到那个班?既然JARB是一个依赖项,Jersey在初始化时不应该访问它的类吗
谢谢 奇怪的是,我假设CustomResourceConfig扩展了javax.ws.rs.core.Application。jersey jar文件是否也位于webapp的WEB-INF/lib中?它确实扩展了javax.ws.rs.core.Application,是的。。和jersey文件在lib目录中。。。仍然是个谜。我有几乎相同的设置,只是我不使用maven。但是,当您从Eclipse部署时,请记住您必须将JARB或直接将项目添加到运行/调试配置中。我还没有在tomcat7中实现部署的自动化,但在我所做的成功试验中,基本上是要求eclipse生成war,唯一的区别是它在servlet定义@web.xml中添加了1,但我认为这根本没有什么区别。确实是个谜。希望至少你能让eclipse正常工作。顺便说一句,我解决了这个问题,但不知道出了什么问题。。。我从头开始在eclipse上重建了项目B并粘贴到源文件中,这似乎解决了它。。。我敢打赌我的项目结构有问题。无论如何谢谢你!
java.lang.ClassNotFoundException: com.jar.b.CustomResourceConfig
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:407)
at org.glassfish.jersey.internal.util.ReflectionHelper$7.run(ReflectionHelper.java:397)
at java.security.AccessController.doPrivileged(Native Method)
at org.glassfish.jersey.servlet.WebComponent.createResourceConfig(WebComponent.java:453)
at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:301)
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:160)
at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1280)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1193)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1088)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5198)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5481)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)