解决Struts2.3.2配合Tomcat8出现could't clear cache问题

struts2.3.2的Bug

昨天用struts框架做一个小项目,Console莫名其妙报出一下错误

1
2
3
4
5
6
7
8
9
10
11
12
13
14
couldn't clear tomcat cache
java.lang.NoSuchFieldException: resourceEntries
  at java.lang.Class.getDeclaredField(Class.java:1953)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.clearMap(LocalizedTextUtil.java:859)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.clearTomcatCache(LocalizedTextUtil.java:842)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.reloadBundles(LocalizedTextUtil.java:821)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.reloadBundles(LocalizedTextUtil.java:797)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.findDefaultText(LocalizedTextUtil.java:214)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.getDefaultMessage(LocalizedTextUtil.java:666)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:542)
  at com.opensymphony.xwork2.util.LocalizedTextUtil.findText(LocalizedTextUtil.java:370)
  at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:208)
  at com.opensymphony.xwork2.TextProviderSupport.getText(TextProviderSupport.java:123)
  at com.opensymphony.xwork2.ActionSupport.getText(ActionSupport.java:103)

google发现已经有人把这个bug提交给了apache, issue地址 ,具体原因就是

Tomcat8 introduce super class WebappClassLoaderBase and moved field “resourceEntries” to it, so WebappClassLoader.class.getDeclaredField(“resourceEntries”) will throw NoSuchFieldException.
Tomcat8的类加载器WebappClassLoaderBase移除resourceEntries属性。

寻找解决方案

看来是源码的问题,把容器换成tomcat7的确可以解决问题,可是身为一个强迫症泛滥的码农怎么受得了呢。于是Github上翻看源码(fix地址),一个叫lukaszlenart的家伙已经提交了修复bug的代码。

重新编译struts

既然有人fix了代码,把源码下下来再编译一个新的xwork-core-2.3.20.jar那么就OK了。下面编译struts要用到Maven(Maven官网)。解压安装包。

设置Maven环境变量

1) MAVEN_HOME=G:\apache-maven-3.3.1
2) PATH=%MAVEN_HOME%\bin

cmd里测试一下是否安装成功mvn -version

编译xwork-core

进入G:\struts-2.3.20\src\xwork-core(根据自己的目录修改)目录输入

mvn package -Dmaven.test.skip=true



编译成功G:\struts-2.3.20\src\xwork-core里会出现一个target文件夹,拷贝替换工程里的xwork-core-2.3.20.jar,大工告成。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值