我希望这会更容易,因为我只想在GlassFish v3上的EAR中使用Wicket进行简单的测试。但是现在我已经通过netbeans插件将Wicket库添加到我的WAR项目
当我尝试在GlassFish上启动我的Web应用程序时出现此启动错误:
例外
javax.servlet.ServletException:PWC1243:过滤器执行引发异常 根本原因
java.lang.NoClassDefFoundError:org / apache / velocity / app / Velocity
Wicket是否需要速度作为依赖?我检查了maven创建的默认项目结构,并没有找到依赖项。我还检查了一个没有提及速度的wicket + ejb教程。
现在我将速度添加到我的类路径中,我收到了这个错误:
http://jira.codehaus.org/browse/MSITE-286
这似乎是2008年解决的问题(我使用了最新版本的课程)。
关于我做错的任何想法?
提前致谢
答案 0 :(得分:3)
Wicket不需要速度,但它可以通过wicket-velocity.jar库与它协作。
完整的堆栈跟踪可能有助于发现 尝试加载它的内容,尽管Web应用程序启动问题可能很难诊断。
修改强>
stacktrace的相关部分似乎是
java.lang.NoClassDefFoundError: org/apache/velocity/app/Velocity
at org.apache.wicket.velocity.Initializer.init(Initializer.java:63)
at org.apache.wicket.Application.callInitializers(Application.java:843)
at org.apache.wicket.Application.initializeComponents(Application.java:678)
at org.apache.wicket.protocol.http.WicketFilter.init(WicketFilter.java:725)
因此wicket应用程序肯定是在尝试加载速度,我们不能责怪glassfish。我将切换到一个我有wicket源的机器并带回可能更多的想法,但我发现你的web.xml也可能有关于wicket配置的有用信息。
<强>诊断强>
web.xml不是问题。
问题是Application.callInitializers()
从类路径上的所有wicket.properties文件加载初始值设定项,并尝试初始化相关组件。
你的类路径上有wicket-velocity.jar,即使你没有使用velocity,wicket正在尝试初始化它,因为它包含一个wicket.properties文件,导致调用org.apache.wicket.velocity.Initializer.init()
(也是在wicket-velocity.jar)。此方法尝试在Velocity中调用静态init方法,该方法不在类路径上。
如果从类路径中获取wicket-velocity.jar,则此问题应该消失。