Java Web Start 在 Windows XP 上总是缓存 JNLP 文件

标签 java distribution java-web-start

在我的公司,我们使用 Java Web Start 向客户分发客户端软件。他们使用不同的 Windows 版本:XP、Vista 和 7。

我们已经通过 JWS 部署了一个版本,过去出现的问题很少。我们的最新版本包括几个文件更改,一些 jar 不见了,其他的出现了,等等。

我们发现在 Windows XP 机器上升级失败是因为 JWS 仍然尝试查找 Web 服务器上不再可用的 jar 文件。我已经检查了我的 HTTP 服务器的日志,并且在应用程序启动期间从未从 XP 机器访问 JNLP 文件。如果我在 Vista 或 Windows 7 上尝试相同的操作,一切正常,JWS 获取 JNLP 描述符并在更新可用时下载差异。因此,在 XP 机器上,只有已知的 jar 文件会被更新,如果 JWS 没有从缓存的 JNLP 文件集中找到某些内容,则会抛出错误。

我编写了一个手动生成 JNLP 文件的 servlet。我在我的 servlet 代码中使用以下 header 配置。

response.setDateHeader("Last-Modified", lastModification);
// IE won't download JNLP file if Cache-Control header presents
//response.setHeader("Cache-Control", "no-cache, must-revalidate");
response.setHeader("Expires", "Mon, 26 Jul 1990 05:00:00 GMT");

这使得 JNLP 文件总是过时的,每次客户端通过 JWS 启动时都会触发文件的重新检查。我什至可以在 XP 的缓存查看器中看到这个日期:

Cache Viewer

我在 Oracle 的错误报告网站上发现了一个永远无法解决的问题:Bug ID: 6189106刚刚在 Windows XP 上用 Java7 进行了同样的测试,但这个问题仍然存在。但仅在 XP 上,因为部署缓存路径中的空白字符(您知道的“文档和设置”)。有人在那里说,如果我将部署缓存的路径更改为其中没有空格字符的路径,它将解决问题。好吧,这不是一个实际的解决方案,因为用户几乎不能写入他们个人资料以外的位置。

因为这个错误存在了很长时间,所以我想应该有某种解决方法。我不想每次都告诉客户清除 Java 缓存并从 Web 重新安装应用程序。我们希望在未来转向更快的发布周期,这将使情况变得更糟。我希望有人对此有一个好主意。 :|

最佳答案

问题出在 java webstart 的 cachedir 路径上。如果它包含空格(在 XP 中正是这种情况),那么路径将以错误的格式传递给 javaws,这将阻止 jnlp 文件的更新检查。

像这样在 deployment.properties 文件中更改此路径:

deployment.user.cachedir=C\:\your\path - 此路径不应包含空格。

附言在此之前清理 Java 缓存。

补充:这个问题好像是更新21之后出现的。

关于Java Web Start 在 Windows XP 上总是缓存 JNLP 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8296281/

相关文章:

java - hibernate中的save方法没有立即插入

客户端与服务器断开连接时 Java 套接字写入错误

python - scipy.stats.johnsonsu 中的 a 和 b 参数是什么?

java - 带签名 JNLP 模板的签名小程序会生成 java.lang.SecurityException

java - 使用(平面)映射优于简单的空检查的优点?

java - 从广播接收器以编程方式连接 Android 中的蓝牙设备

c++ - 自己的 C++11 随机数分布实现

algorithm - 搜索分布式算法来分发一些对象

java - 签署 Jars 以解决内部应用程序的未知发布者问题

java - 已签名的 jar 文件——jnlp 无法提示用户接受证书