[英]Adding properties to abstract class which are already extending from that abstract class
[英]Extending an abstract class in the WAR from a class in the lib folder
我想啟用以下方案:
我的Web應用程序(WAR文件)自己部署在Tomcat上
我的Web應用程序以IFace
接口和AbstractIFace
抽象基礎實現的形式提供擴展API,其類文件部署在WAR文件中
應用程序的擴展作為JAR文件提供,放置在類路徑中的某個位置(即WAR外部)
我編譯了一個ConcreteIFace
類,它擴展了AbstractIFace
並將其打包成一個JAR。 我將JAR放在$TOMCAT_HOME/lib
並在webapps
部署了WAR。 當我從WAR中的servlet嘗試以下內容時:
Class clazz = Class.forName("ConcreteIFace");
我得到以下堆棧跟蹤:
java.lang.NoClassDefFoundError: AbstractIFace
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
java.lang.ClassLoader.defineClass(ClassLoader.java:615)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
java.net.URLClassLoader.access$000(URLClassLoader.java:58)
java.net.URLClassLoader$1.run(URLClassLoader.java:197)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:247)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1698)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
java.lang.Class.forName0(Native Method)
java.lang.Class.forName(Class.java:169)
com.backbase.sample.DummyServlet.service(DummyServlet.java:14)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
如果ConcreteIFace
直接實現IFace
而不是通過AbstractIFace
則會顯示類似的堆棧跟蹤
我的問題是:
因為所有必需的類都在應用程序類路徑中,為什么我有NoClassDefFound
?
是否有可能實現我在開始時提出的場景? 如果是這樣,怎么樣?
在Web應用程序中,類路徑是隔離的。 Web應用程序無法看到彼此的類,Tomcat無法看到應用程序的類,應用程序無法看到Tomcat的內部類(只有Servlet API等公開的接口)。
Web應用程序應該是獨立的,並且與容器無關。
最簡單的方法是重新打包war文件以包含插件。
其他選項包括上升到可以具有相互依賴性的企業歸檔,或者將Web服務器嵌入到應用程序中(而不是相反)。
您的API類位於WAR中,$ TOMCAT_HOME / lib中的類無法訪問它們。 一個建議是將您的API-a IFace和AbstractIFaceClass分開來分隔jar並將它放在$ TOMCAT_HOME / lib中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.