【发布时间】:2015-05-18 23:59:58
【问题描述】:
我正在使用 Java Webstart 技术开发一个 Java 桌面应用程序。 我使用有效证书签署我的应用程序并使用 JnlpDownloadServlet 部署它。 我使用 maven-webstart-plugin 准备所有这些基础架构。
但是当我的证书过期并且我必须辞职并重新部署我的应用程序时,我无法让 webstart 完全重新下载我的应用程序。
据我所知,根据我从 Internet 收集到的信息(Webstart 官方文档很糟糕),默认情况下 webstart 根据文件服务器时间(Last-Modified HTTP 标头)检查版本并更新库
如果是这样,webstart 客户端应该完全下载我的应用程序的新版本。
但是 webstart 只是在 JNLP 文件中下载具有较新版本号的库,因为 maven webstart 插件会生成它们。
应用程序无法启动,抱怨不同的签名 JAR,当我查看 tomcat 访问日志时,服务器中唯一检查和下载的文件是 JNLP 文件、具有真正较新版本的 JAR 和另一个 JAR (我假设这是一个被下载、签名检查并导致客户端失败的请求)所有请求都是 GET,没有 HEAD
我不在 JNLP 中使用基于版本的协议(由 jnlp.versionEnabled 属性激活),但 webstart 客户端的行为就像它已打开一样。
我的 JNLP 更新选项是
<update check="always" policy="always" />
我看到的唯一解决方案是更新所有 JAR 的版本号,在版本号上附加一些内容,但 JNLP“渲染”是由 webstart-plugin 自动完成的,我更喜欢更简单、更健壮的方法。
想法?
编辑:
似乎正在触发基于版本的下载协议,因为 JNLP 文件中的 jar 元素具有 version 属性。这是由 webstart 插件自动添加的。在管理依赖版本时,这是一个很棒的功能。但是,如果您只想更新签名,那就很痛苦了。
【问题讨论】:
-
我经常使用 webstart 并更新 jar 文件而不重命名它们。 Webstart 总是注意到更改并下载修改后的 jar 文件。尝试一个简单的测试用例。重新签名或修改其中一个 jar 文件并将其上传到您的服务器,然后查看您的本地 webstart 是否注意到更改并下载重新签名的 jar。
标签: java java-web-start jnlp