2011-12-17 117 views
1

我有一個基於Web的UI(使用Vaadin框架)的Java應用程序。 我希望用戶獲得應用程序並在其本地機器上運行。有些用戶可能不是很技術性,所以需要儘可能簡單和簡單地使用它們。BKM爲最終用戶提供基於Web的Java應用程序+ Jetty + JRE

可能的解決方案:

  1. 創建一個web應用程序+碼頭+批次和shell腳本來啓動一個應用程序分配。 也可能包括JRE。 用戶故事將是:下載一些ZIP文件,解包並運行「start.bat」或「start.sh」。該腳本將啓動Jetty並可能啓動帶有「http:// localhost:8080/myapp」URL的Web瀏覽器。 「安裝JRE」或「什麼是你的Java Home」或「你的JRE太舊了」等應該沒有什麼魔力......這會嚇跑許多非技術人員。 這裏的困難:如果機器沒有JRE會怎麼樣?我想避免使用JRE創建3種不同的分佈式(對於Win/Linux/MacOS)。將所有3個JRE封裝到同一個分配中似乎是一種矯枉過正。

  2. 我看到的另一種方法是使用Java Web Start。我的應用程序將通過Jetty JAR作爲依賴項通過JWS下載,並在此情況下啓動嵌入式Jetty。用戶故事:單擊某個網站上的按鈕以在本地啓動應用程序。 我記得在5年前從代理服務器後面使用JWS時出現問題:無法加載依賴項。不知道它是否仍然是一個問題。從那以後我就沒有使用過JWS,所以我對它非常熟悉。 JWS的另一個問題是,它需要人們通過互聯網連接才能啓動應用程序(至少第一次或者每次都可以),但這並不總是可行的(某些組織無法連接到Internet)。 AFAIK,最後一個JWS建議安裝JRE,如果它尚未安裝,所以對於最終用戶來說這應該很容易。 這可能是JWS(?)潛在的問題。

  3. 最後,最後一種方法是用launch4j或InstallShield之類的東西打包所有東西。希望這些程序能夠安裝JRE,它現在還沒有出現,並且可以在無頭模式下運行(用於服務器)。

到目前爲止,假設JWS可以做我所需要的,那麼對於大多數用戶來說,選項2看起來最容易。

所以,我的問題是:

  • 你使用這些解決方案3看到哪些附加的陷阱?
  • 在我的情況下,你更喜歡哪一個?

回答

0

我更喜歡的解決方案1和3。我的意思的組合:

  • 首先,建立與運行你的web應用的嵌入式碼頭一個罐子。這個jar必須有一個主類(啓動一個嵌入式Jetty)和一個配置了「Main-Class」屬性的MANIFEST.MF,所以這個jar可以運行:「java -jar myEmbeddedWebApp.jar」。
  • 然後,使用launch4j爲該jar構建一個exe包裝器,例如myEmbeddedWebApp.exe
相關問題