java - Tomcat 8.0.32 - 更新了网络应用程序未使用的共享库

标签 java tomcat jar shared-libraries

我有一个在 Windows 上运行的 tomcat 8.0.32。

在文件夹 tomcat\lib 中,我有一个 shared.jar 文件。 shared.jar 是所有 Web 应用程序使用的全局共享库。 此文件包含一个包含常量的 java 类:

public final int CONSTANTVALUE = 1000;

我有 2 个使用此 CONSTANTVALUE 的 Web 应用程序。 我删除了 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 编译使用常量折叠(内联常量值)从而消除对共享库的依赖。

使用避免常量折叠的技术,我设法强制执行对共享库的依赖。

关于java - Tomcat 8.0.32 - 更新了网络应用程序未使用的共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42488616/

相关文章:

java - Sbt 脚本和不同的资源和源目录

java : how to name a new interface?

eclipse - 将特定于服务器的选项添加到 Eclipse 管理的 Tomcat 实例(在 server.xml 中)

java - 为什么 "GLProfile.GetDefault()"在 NetBeans 中运行时有效,但在运行 Jar 时无效

java - Hadoop项目启动时需要的JAR有哪些?

java - 如何将大文件(> 5 mb)从 Blobstore 发布到 Google 云端硬盘?

java - 有没有办法在< 21 API上实现计划任务?

java - Tomcat 和带有百分号的 URLS

maven - 使用捆绑的 Tomcat 创建 war

java - 安装自己的eclipse插件后没有反应