我有一个运行在Windows上的tomcat 8.0.32。
在文件夹tomcat \ lib中,我有一个shared.jar文件。
shared.jar是所有Web应用程序使用的全局共享库。
该文件包含一个包含常量的java类:
public final int CONSTANTVALUE = 1000;
我有2个Web应用程序正在使用此CONSTANTVALUE。
我删除了shared.jar并将新的shared.jar复制到具有新常量值的tomcat \ lib中:
public final int CONSTANTVALUE = 2000;
我重新启动Windows(和tomcat),但是应用程序仍然从shared.jar的旧版本中看到值“ 1000”。
我已经确认该类仅存在于tomcat \ lib文件夹下,而没有其他地方。应用程序WEB-INF \ lib没有此jar。
如果删除了shared.jar,则Web应用程序将由于ClassNotFoundException(确认正在使用shared.jar)而无法运行。
如果我重新部署Web应用程序,它们将获得新的常数“ 2000”
为什么/ tomcat如何记住旧版本的shared.jar?
为什么我必须重新部署Web应用程序以使它们能够使用已被新代码替换的shared.jar? (违反了共享库的目的)
最佳答案
原来这是Java问题,而不是Tomcat。 Java编译使用常量折叠(内联常量值),从而消除了对共享库的依赖。
使用避免连续折叠的技术,我设法对共享库实施了依赖关系。