tomcat 8 加 struts2的 java.lang.NoSuchFieldException: resourceEntries

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%in

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

编译xwork-core

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

mvn package -Dmaven.test.skip=true


原文地址:https://www.cnblogs.com/signheart/p/6603482.html