2013-01-10 23 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