Wicket在GlassFish v3上的应用

4
我希望这会更容易,因为我只想在GlassFish v3中的EAR内运行一个简单的Wicket测试。然而,现在我已经通过NetBeans插件将Wicket库添加到我的WAR项目中。
  • wicket-1.4.10.jar
  • wicket-extensions-1.4.10.jar
  • slf4j-api-1.4.2.jar
  • slf4j-jdk14-1.4.2.jar
当我尝试在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年解决的问题(当然我使用的是最新版本)。
我做错了什么?有什么想法吗?
先行致谢。
1个回答

4

Wicket不需要Velocity,但是可以通过wicket-velocity.jar库与之协作。

完整的堆栈跟踪可能有助于发现谁试图加载它,尽管诊断Web应用程序启动问题可能很痛苦。

编辑:

堆栈跟踪的相关部分似乎是

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应用程序肯定正在尝试加载Velocity,我们不能责怪Glassfish。我将切换到一台我拥有Wicket源代码的机器,并带回也许更多的想法,但我想到您的web.xml可能也有关于Wicket配置的有用信息。
诊断
web.xml不是问题所在。
问题在于Application.callInitializers()从类路径上所有wicket.properties文件中加载初始化程序并尝试初始化相关组件。
即使您没有使用Velocity,您的类路径上仍有wicket-velocity.jar,因此Wicket会尝试将其初始化,因为它包含一个wicket.properties文件,导致调用org.apache.wicket.velocity.Initializer.init()(也在wicket-velocity.jar中)。该方法尝试调用Velocity中的静态init方法,但该方法不在类路径上。
如果您从类路径上删除wicket-velocity.jar,则此问题应该消失。

我将生成的web.xml内容复制粘贴到WAR内部的web.xml中:http://pastebin.com/fSuuUrzT - 但是新的web.xml版本为2.5而不是2.4 - 可能存在问题。 - Stefan Ernst
1
没问题。我很喜欢解决这个问题,它也帮助了我对Wicket初始化的理解。所以你的问题得到了我的赞同。 - Don Roby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接