我有一个现有的Maven项目在java 1.8.0_241版本上运行良好。但这支持vaadin版本7.2.6,并且需要升级到vaadin 8以及兼容包。在进行必要的更改后,所有编译问题都得到了解决,但在执行过程中,我们的一个类GuiBaseApplication将面临ClassNotFoundException。但该类文件存在于正在使用的OSGI Bundle guibase-2.2.4-SNAPSHOT.jar中。
这个类是一个抽象类,它扩展了一个类并实现了另一个类。
public abstract class GuiBaseApplication extends UI implements CrumbTrail
{
-
-
}
但当我们获取-verbose日志时,可以看到该类被加载了一次,如下日志所示。
**[Loaded com.product.rm.common.guibase.GuiBaseApplication from file:/home/user/bcd/com.product.bss.vaadin/target/guibase-2.2.4-SNAPSHOT.jar]**
现在,Web GUI HTTP服务器已经启动并运行
然后尝试通过浏览器连接,显示以下错误。
HTTP ERROR 500 javax.servlet.ServletException: com.vaadin.server.ServiceException: com.vaadin.server.ServiceException: com.product.rm.common.guibase.GuiBaseApplication could not be loaded
URI: /gui
STATUS: 500
MESSAGE: javax.servlet.ServletException: com.vaadin.server.ServiceException: com.vaadin.server.ServiceException: com.product.rm.common.guibase.GuiBaseApplication could not be loaded
SERVLET: com.product.rm.bcd.server.webgui.ApplicationServlet-27a56cca
CAUSED BY: javax.servlet.ServletException: com.vaadin.server.ServiceException: com.vaadin.server.ServiceException: com.product.rm.common.guibase.GuiBaseApplication could not be loaded
CAUSED BY: com.vaadin.server.ServiceException: com.vaadin.server.ServiceException: com.product.rm.common.guibase.GuiBaseApplication could not be loaded
CAUSED BY: com.vaadin.server.ServiceException: com.product.rm.common.guibase.GuiBaseApplication could not be loaded
CAUSED BY: java.lang.ClassNotFoundException: com.product.rm.common.guibase.GuiBaseApplication
检查现有版本和工作版本,我们可以看到这个类被加载了两次,如下所示,但带有$1和$2符号
[Loaded com.product.rm.common.guibase.GuiBaseApplication$1 from file:/home/user/bcd/com.product.bss.vaadin/target/guibase-2.2.3-SNAPSHOT.jar]
[Loaded com.product.rm.common.guibase.GuiBaseApplication$2 from file:/home/user/bcd/com.product.bss.vaadin/target/guibase-2.2.3-SNAPSHOT.jar]
我们检查并确认这两个类是GuiBaseApplication$1,GuiBaseApplication$2存在于guibase-2.2.4-SNAPSHOT.jar文件中,但仍然存在类加载问题。
如果我们能找到一些进一步研究的方向,那将是非常有帮助的。我们可以尝试找出原因,然后解决问题。
这是vaadin中的一个Bug检查页面https://floriansblog.wordpress.com/2015/04/30/vaadin-osgi-managing-the-classloader/