Java Web Start 找不到具有格式化版本文件名的 jar

标签 java web-applications versioning java-web-start

我有一个位于文件服务器上的尽可能简单的 Web Start 应用程序。该目录由以下内容组成:

foo__V1.1.jar
runfoo.jnlp

runfoo.jnlp的内容如下:

<?xml version="1.0" encoding="utf-8"?>
  <jnlp spec="1.0+" href="http://myserver.com/runfoo.jnlp" codebase="http://myserver.com">
  <information>
    <title>Foo</title>
  </information>
  <security>
    <all-permissions/>
  </security>
  <resources>
    <j2se version="1.7.0_06+" href="http://java.sun.com/products/autodl/j2se" />
    <jar href="foo.jar" main="true" version="1.0+"/>
    <property name="jnlp.versionEnabled" value="true"/>
  </resources>
  <application-desc name="Foo" main-class="com.myserver.foo.Foo" width="640" height="480" />
  <update check="always" policy="always" />
</jnlp>

问题是 Web Start 正在尝试访问位于 http://myserver.com/runfoo.jnlp?version-id=1.0%2B 的文件, 而没有找到它。

我假设在这个简单的实例中需要一些额外的步骤让 Web Start 自动获取最新的 jar 版本,但是经过大量的谷歌搜索之后我发现所有的步骤都是一样的:

  • 将文件重命名为<file_name>__V<versionnumber>.jar
  • 添加 versionEnabled jnlp的属性(property)
  • 享受版本化的好处

当我指定一个明确的文件名时,jnlp 文件运行得非常好,但当我尝试实现版本控制时总是失败。

我确定我遗漏了一些重要的东西,但我无法在任何地方找到它。我猜想虽然我的设置很简单,但它并不简单到可以同时工作。

任何帮助将不胜感激:)


明确的异常(exception)是:

com.sun.deploy.net.FailedDownloadException: Unable to load resource: (http://myserver.com/foo.jar?version-id=1.0%2B, 1.0+)

我也试过删除 +来自版本规范并发生相同的错误(当然除了缺少的加号)。写作 foo__V1.1.jar在 jnlp 文件中有效,但当然打败了这一点。

最佳答案

版本化文件名是 JNLP download servlet 使用的约定知道当客户端请求 lib.jar?version=something 时要提供什么服务。您需要在服务器端下载 servlet(或者您需要在 mod_rewrite 规则或类似规则中复制它的行为),仅带有版本名称的普通文件是不够的。

关于Java Web Start 找不到具有格式化版本文件名的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14264310/

相关文章:

mercurial - 自动将构建日期附加到 Eclipse 插件版本号

npm - NPM 版本中的错误 - 将补丁版本列入黑名单

linux - 如何在旧版本的 Bash 上测试我的 Bash 脚本?

Java 8 流串行与并行性能

java - 如何在运行时启用/禁用 JMS 监听器?我可以创建一个在运行时启用/禁用监听器的 api 吗?

用于 Web 应用程序的 node.js golang 复合架构

javascript - 检查按钮点击事件并做一些事情,如果用户点击其他地方则删除它们

java - 计算器不能有小数

java - ... 上不存在 'Access-Control-Allow-Origin' header 。因此不允许访问 Origin 'null'

android - 为什么 WhatsApp 这样的应用程序的下载和上传速度不同?