Without VM的Installer

把JVM和軟體包一起發布,是將side effect降到最低的方法。然而,Oracle打算開始追討授權費,也讓我們開始思考該怎麼發布軟體。如果用使用者安裝的Sun JVM是否能解決問題呢? 這我們不曉得;而另外一條路就是OpenJDK。然而OpenJDK的授權,也難以直接包裝於企業用軟體。因此還是要回歸到如何不包裝JVM,但安裝時有JVM可用的問題。

在InstallerAnywhere 2015 build tab中,可以看到VM Search Instructions設定。其中Without VM包含了搜尋現有與線上下載兩種模式:

Download from URL

如上圖所示,你必須輸入一個URL,它可以是http也可以是ftp,但請確定server允許匿名存取;md5 hash驗證就看你是否需要,我是使用HashMyFiles去取得md5 hash值。實際執行build installer,從http下載結果:


從ftp下載結果:


不管是下載失敗或md5驗證沒通過,安裝最後都會結束。

Search for VM

首先可以從user guide的Locations on a Target System that Are Searched for JVMs中得知:

  1. Windows搜尋%PATH%與Registry。
  2. Unix搜尋$PATH與某些固定放command line的路徑。

(下圖來自IA 2015 user guide)


如果你所需要的JVM為1.8以上,可以到Project > JVM Settings中,做如下圖的設定:

以上方式只是告訴你在使用without VM去build installer後,當installer執行時獲得JVM的方法。然而在轉換這種方法後,installer是否會有其它side effect,就需要自行測試。畢竟user的環境是複雜滴~

舉例來說,使用現有的jvm後,如果你的installer內原本會透過$lax.user.dir$$/$resource$/$jre$/$bin$/$java的方式去執行某些動作,就會有問題;如果用下載的就不會有問題。面對這問題,可以把java執行路徑改為:

# 以linux為例
# $prop.JAVA_PROPERTY$ 代表要透過InstallAnywhere取得java properties
$prop.java.home$$/$bin$/$java -version