簡體   English   中英

球衣上的ResourceConfig中的依賴關系問題

[英]Problem with dependencies in ResourceConfig on Jersey

我在Eclipse上有一個Jersey / Spring項目( Project Acom.project.a ),該Project B依賴於另一個Project BProject Bcom.project.b )。

Eclipse在本地Tomcat服務器上構建和運行應用程序之前不會在項目上顯示任何錯誤。

它引發此錯誤:

SEVERE: StandardWrapper.Throwable
MultiException stack 1 of 1
java.lang.NoClassDefFoundError: com/project/b/SomeClassToRegister
    at com.project.a.CustomApplication.<init>(CustomApplication.java:31)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129)
    at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:1009)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:905)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:997)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:989)
    at org.glassfish.jersey.server.ApplicationHandler.createApplication(ApplicationHandler.java:340)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:319)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:336)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1228)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1066)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5449)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5747)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    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)
Caused by: java.lang.ClassNotFoundException: com.project.b.SomeClassToRegister
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1955)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1798)
    ... 28 more

Jul 09, 2019 5:52:13 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet [com.project.a.CustomApplication] in web application [/someApplication] threw load() exception
java.lang.ClassNotFoundException: com.project.b.SomeClassToRegister
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1955)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1798)
    at com.project.a.CustomApplication.<init>(CustomApplication.java:31)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1129)
    at org.jvnet.hk2.internal.Utilities.justCreate(Utilities.java:1009)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.create(ServiceLocatorImpl.java:905)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:997)
    at org.jvnet.hk2.internal.ServiceLocatorImpl.createAndInitialize(ServiceLocatorImpl.java:989)
    at org.glassfish.jersey.server.ApplicationHandler.createApplication(ApplicationHandler.java:340)
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:319)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:336)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:170)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:358)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1228)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1172)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1066)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:5449)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5747)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:145)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1707)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1697)
    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)

CustomApplication擴展了org.glassfish.jersey.server.ResourceConfig並嘗試按以下方式注冊該類:

public class CustomApplication extends ResourceConfig {
    public CustomApplication() {
        // Specify packages of java code.
        packages("com.project.a");
        packages("com.project.b"); //>>> Line 30
        register(com.project.b.SomeClassToRegister.class); //>>> Line 31
    }

}

有趣的是, Line 30沒有問題地調用com.project.b的主包,但是代碼在line 31崩潰了。 com.project.b.SomeClassToRegister存在於依賴項com.project.b

顯示錯誤后,將正常顯示服務器的welcome-file jsp頁面,但是每個端點在訪問時都引發相同的NoClassDefFoundError錯誤。

Project A的構建路徑將Project A Project B作為列出的依存關系,並且Project B也作為Project AWeb Deployment Assembly包裝的一部分列出。

我目前正在使用以下資源配置在本地Tomcat服務器上運行它。 我試圖刪除具有相同結果的Project B的重復外觀。

在此處輸入圖片說明

我是否缺少有關將兩個項目鏈接在一起的任何信息,這可能是導致錯誤的原因?

在對兩個項目的配置進行了很多擺弄之后,對我有用的是:

  • 轉到項目A的屬性
  • Java構建路徑
  • 資源
  • 添加項目B的文件夾src / main / java
  • 申請並關閉
  • 清理項目並運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM