For the complete documentation index, see llms.txt. This page is also available as Markdown.

Java Web Start

現在大家都會忘記 JWS 是代表 Java Web Start,檔名取 JNLP 又很點點點...

.jnlp 檔案會被 cache 起來(jar 檔應該也有),在 client side 的作法是執行 javaws -uninstall 或是用 javaws -viewer 叫出 GUI 介面操作。

看起來比較正規的作法是 .jnlp 檔案裡頭寫 update element,例如

但是實測結果好像沒啥鳥用... 不確定是少了什麼... =="

目前最實在的方法是讓 JNLP 中 <jar>version 值持續遞增, 這樣除了 Chrome 會有重複下載的小問題外,Firefox 跟 IE 貌似都能正常運作。

Maven

大概也只有 Webstart Maven Plugin 這個可以用,以下簡稱 MWebStart。 它的文件寫的不是很好,實務上建議直接跳 JnlpDownloadServlet Example 這頁。

MWebStart 可以:

  • 把 Maven Project 產出的 jar,包進 web 的 Maven Project 當中

  • 以先 gen 好的 key 自動 sign jar

  • gen version.xml

失敗 case ###

假設 Foo 這個專案是由幾個 Maven Project 組成的:

/Foo 
    /FooJWS
    /FooModel
    /FooWeb

原本的設計是在 Foo/pom.xml 當中掛進 FooJWSFooModelFooWeb 的 module, 如此就能確保 FooWeb 在 build 之前就先 build FooJWS。 但實際上卻會發現 JWS 出現無法順利載入的狀況, 最終發現原因是出在 MWebStart 產生的 version.xml 不正確。

假設 FooWeb 中設定使用 FooJWS 9.7.8 版,version.xml 預期是長這樣:

但是實際上產生的 <file> 值卻是 FooJWS.jar,沒有帶版號 (但是 FooJWS-9.7.8.jar 還是會 sign、會複製到 webstart 目錄)。 更有趣的是,是對 Foo 作 maven install 才會錯, 如果對 FooWeb 作 maven install 就會正常...... (就是這樣所以 debug 了老半天,還以為是 JNLP Download Servlet 出了啥問題 ==")

所以,在不知道 MWebStart 用了啥神奇邏輯的情況下, 就是移除 Foo/pom.xmlFooJWS,一切事情就沒事啦...... 至於 Jenkins 連動 build 的事情就是另一個故事了 [遠目]

參考資料

Last updated