Vaadin@Javascript:清除更新JS文件的缓存

Vaadin@Javascript:清除更新JS文件的缓存,javascript,vaadin,Javascript,Vaadin,我的应用程序中有一个@JavaScript注释,用于从类路径加载.js文件 现在,我已经对文件进行了更新并重新部署(本地),但我总是会恢复旧版本。我尝试过重新加载所有内容(ctrl+R、ctrl+F5),但这不起作用,而且我不希望用户必须这样做 我过去使用的一个技巧(没有Vaadin)是用版本(例如?version=1)附加一个请求参数,并对其进行更新,以便URL发生变化。但是显然,@JavaScript注释不允许这样做(Vaadin甚至不尝试加载文件)。这是本地缓存JS文件的浏览器功能,与Va

我的应用程序中有一个@JavaScript注释,用于从类路径加载.js文件

现在,我已经对文件进行了更新并重新部署(本地),但我总是会恢复旧版本。我尝试过重新加载所有内容(ctrl+R、ctrl+F5),但这不起作用,而且我不希望用户必须这样做


我过去使用的一个技巧(没有Vaadin)是用版本(例如?version=1)附加一个请求参数,并对其进行更新,以便URL发生变化。但是显然,@JavaScript注释不允许这样做(Vaadin甚至不尝试加载文件)。

这是本地缓存JS文件的浏览器功能,与Vaadin无关


正如您自己所想:如果您想确保用户拥有最新版本的JS文件,您应该将JS文件名重命名为:
script\u buildNumber.JS

使用Chrome的匿名功能(在访问辛辣/令人不快的网站时不要使用)

只需在匿名模式下打开浏览器,浏览器将不会缓存任何内容


其他浏览器也有这个功能(Opera、IE、Firefox、Safari)。

正如我在1月12日关于这个问题的评论中所指出的,重命名文件是有效的。这似乎是目前唯一的方法,尽管还远远不够理想。

我通过利用Vaadin servlet配置的
resourceCacheTime
参数克服了这一问题:

@VaadinServletConfiguration(ui = MyUI.class, resourceCacheTime = 0)

尽管如我对的回答中所述,它有其局限性。

也许您的应用程序正在UI对象上使用@PreserveOnRefresh注释?这可能会阻止Vaadin重新加载任何JS。不,我没有使用@PreserveOnRefresh。此外,我重新启动了服务器,所以这不会有什么不同。我现在刚刚更改了文件名(添加了vxxx,其中xxx是一个数字),这是有效的。那么你是说,即使重新启动服务器也会保留“旧”文件?您能在目标目录中为文件执行
查找
吗?可能是,它存在多次(例如,一次来自ide,一次来自构建工具)。如果这两个文件都在类路径中,则只拾取一个。好吧,至少现在我已经重命名了该文件,没有使用旧名称的文件。在重命名之前,我确实检查了
target
文件夹中的文件,它有新的内容,但我仍然在浏览器中获取旧的内容。我不同意这与Vaadin无关:web应用程序有办法告诉浏览器,例如,不要缓存某些资源。我自己想出了重命名该文件的答案,但那真是一个骇客。至少能够添加请求参数可以避免我必须在版本控制中更改文件的实际名称,新文件是从光盘上全新加载的,在默认配置下,至少在Fx中按CTRL-F5重新加载将拉取新文件。我不希望我的用户必须以匿名模式访问我的web应用程序,以确保他们拥有最新的javascript文件。Vaadin应该提供一种告诉浏览器不要缓存它们的方法,或者支持在名称中添加请求参数,这样文件就不必进行物理重命名。当然,我同意你的看法,我认为你只需要在开发时使用它。