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 預期是長這樣:
<?xml version="1.0"?>
<jnlp-versions>
<resource>
<pattern>
<name>FooJWS.jar</name>
<version-id>9.7.8</version-id>
</pattern>
<file>FooJWS-9.7.8.jar</file>
</resource>
</jnlp-versions>
但是實際上產生的 <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 modified 2yr ago
Copy link
Outline
Maven
失敗 case ###
參考資料