我在eclipse中创建了一个新的Vaadin(6.6.5)项目,我试图将它部署在JBoss 7.0上,但它给了我一个GWT ClassNotFoundException
Caused by: java.lang.ClassNotFoundException: com.google.gwt.user.client.ui.HasWidgets from [Module "deployment.test.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:358)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:330)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:307)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:101)
... 64 more
我是否需要做一些额外的事情来部署gwt库?
答案 0 :(得分:5)
似乎编译Vaadin客户端widgetset所需的gwt-user.jar中的一些GWT类是由JBoss7不必要地加载的。
vaadin.jar包含对gwt-user.jar的引用,但在运行时期间不需要,仅在widgetset编译时。 JBoss仍然希望加载这些类导致问题。
JBoss中有一个错误报告:http://community.jboss.org/thread/169575?tstart=0
如前所述,解决方法是将gwt-user.jar包含在带有vaadin.jar的WEB-INF / lib文件夹中的部署包中,似乎可以正常工作。
答案 1 :(得分:1)
Vaadin Eclipse插件为gwt jar文件创建库依赖项,通常Eclipse在部署时应该处理运行时类路径。
正如包名com.google.gwt.user.client所示,这应该在gwt-user.jar中。
只有在使用GWT编译客户端代码时才需要gwt-dev.jar。
您使用的是附加组件吗?应始终将加载项(及其依赖项)添加到WEB-INF / lib,以使服务器端类可用于GWT编译器可用的应用程序和客户端代码。
问题的可能原因是(不必要的)依赖于客户端类,这在服务器运行时是不可用的。因此,您可能还会检查代码中是否存在客户端GWT类(如HasWidgets)的不必要的服务器端依赖关系。
答案 2 :(得分:1)
检查您的代码,确保您不会从代码中意外访问此com.google.gwt。**类。如上所述,不需要在服务器中部署gwt库。
答案 3 :(得分:0)
Vaadin现已发布一个附加组件来解决此问题,请参阅https://vaadin.com/directory#!addon/vaadin-application-server-class-loader-workaround