1

我有一个简单的 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
  • 享受版本化的好处

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

我确定我错过了一些重要的东西,但我无法在任何地方找到它。我猜想虽然我的设置很简单,但它并不简单,因为它既能工作又能工作。

任何帮助都感激不尽 :)


明确的例外是:

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

我也尝试+从版本规范中删除,并且发生了同样的错误(当然除了缺少的加号)。写入jnlpfoo__V1.1.jar文件是可行的,但当然会破坏这一点。

4

2 回答 2

3

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

于 2013-01-11T09:34:27.820 回答
0

对于追随者,对我来说类似的问题

java.io.IOException: Error returned: 10 Could not locate resource
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

“无法启动应用程序”

com.sun.deploy.net.FailedDownloadException: Unable to load resource: (http://host:port/webapp_name/app/jar-name.jar?version-id=1.5.0-20160707.182810-19, 1.5.0-20160707.182810-19)
    at com.sun.deploy.net.DownloadEngine.actionDownload(Unknown Source)
    at com.sun.deploy.net.DownloadEngine.downloadResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.deploy.cache.ResourceProviderImpl.getResource(Unknown Source)
    at com.sun.javaws.LaunchDownload$DownloadTask.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

意思是“特殊的内部文件 version.xml 与 web-app 目录中部署和存在的文件名不匹配”:

参考:http ://docs.oracle.com/javase/6/docs/technotes/guides/javaws/developersguide/downloadservletguide.html

于 2016-07-15T18:01:45.780 回答