IntelliJ Idea 升级到2020.1 tomcat7 报java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter
Idea 升级到最新的2020.1版,旧项目报错,使用的是tomcat7。 但用2018.2版运行没有问题。
java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addFilter, 而且该项目有乱码问题
2020.1版乱码:
2018.2版正常:
通过百度,在Tomacat7的context.xml文件里的<Context>中加上<Loader delegate="true" />
能够解决报错问题。
设置为True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False时,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。
对于乱码问题,在tomcat7 conf下的logging.properties 添加:
能够解决tomcat本身自己的编码问题,但程序本身的日志还是乱码:
记起昨天为解决连接Docker日志乱码问题,在VM options中添加了:-Dfile.encoding
去掉后果然正常了(需要去掉刚才设置的tomcat中log的编码):
看来tomcat7与docker中文乱码有冲突。Docker日志是存成文件,然后传到idea控制台,使用-Dfile.encoding=UTF-8 强行设置系统文件编码格式为utf-8 会解决问题。但file.encoding跟操作系统默认字符集有关,Windows下默认的是GBK,我们强行 -Dfile.encoding=UTF-8 把系统文件编码格式设置为UTF-8,这就冲突了.
解决办法:
也设置tomcat的VM options: -Dfile.encoding=UTF-8
然后两个编码都正常了: