2013-01-10 24 views
1

我有一个简单的Web Start应用程序坐在文件服务器上。该目录包括以下内容:Java Web Start找不到具有格式化版本文件名的jar

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> 

的问题是,网络开始试图在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+) 

我也试图消除从版本规范+并出现相同的错误(除从当然遗漏加)。在jnlp文件中写作foo__V1.1.jar的作品当然会打败这一点。

+0

Tha t JNLP无效。请务必使用[JaNeLA](http://pscode.org/janela/)进行检查。 –

+0

谢谢,未关闭的更新元素是一个错字,但应用程序desc中的无效属性是错误的 - 谢谢你的抬头。有趣的是,尽管存在这些错误,但JNLP仍能正常运行 - 特别是未关闭的更新元素使其无效的XML。 –

+1

*“有趣的是,即使出现这些错误,JNLP也能正常工作”* JWS客户端不会拒绝无效的JNLP文件,而是试图猜测是什么意思。我认为这是一个非常糟糕的主意 - [GI/GO](http://en.wikipedia.org/wiki/Garbage_in,_garbage_out)。任何人猜测,两种不同版本的客户端可能会解析无效信息。 :( –

回答

3

版本控制的文件名是JNLP download servlet用于在客户端要求时知道要提供什么服务的约定。您需要在服务器端下载servlet(或者您需要在mod_rewrite规则或类似内容中复制其行为),只是具有版本名称的纯文件是不够的。

+0

老实说,我从来没有读过任何明确表示'所有这些版本约定只在使用JNLP下载servlet时才有效',所以谢谢:) –

+0

要完成自动化,您可以使用PHP或类似软件生成JNLP文件。 –

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目录中“:

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