Tomcat无法加载位于依赖项jar中的类?

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

我在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.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)