簡體   English   中英

如何使用特定的JRE交付我的Java應用程序?

[英]How to deliver my Java application with a particular JRE?

有人知道如何將特定的JRE與已編譯的Java應用程序一起打包嗎? 我目前有一個可執行jar文件,並希望將JRE 6 Update 31放入其中。 因此,無論客戶端安裝了哪個JRE版本,應用程序都會使用隨附的JRE。 解決方案應該獨立於平台。

有任何想法嗎? 提前謝謝了!

如果您在目標平台上安裝了jre,比如說Windows 64位,只需復制Java安裝中jre文件夾下的所有內容並將其放在發行版中。 然后創建一個批處理文件以指向您的本地jre而不是系統jre。

這是我做的:

  • 我的jar文件在dist文件夾中
  • 將系統jre文件夾復制到dist\\jre-win-1.7.0_04
  • 創建一個.bat文件,其中包含以下行: jre-win-1.7.0_04\\bin\\java.exe -jar MyProgram.jar

..boom,完成了! 雙擊批處理文件,它使用本地jre運行您的jar文件。 要自己證明,請卸載系統jre並雙擊批處理文件。 仍然有效。

您可以在Linux或OS X上以類似的方式執行此操作。

我還想指出,這是一種相當普遍的做法,許多Java發行版都是這樣完成的。 所以,不要說你不能或不應該。

但是,有一些警告。 在我的Windows x64示例中,這確實使您的發行版更大並且依賴於平台。 但是,它可行且易於管理。 jre支持有限數量的平台並猜測它們是什么......它們也依賴於平台。

在OSX上,他們正在從提供Java的Apple轉向提供Java的Oracle,這也意味着Java不會安裝在全新的OSX上。 Oracle提供了一個用於打包Java安裝的工具,他們強烈建議在安裝過程中提供jre。 這樣做的好處是客戶不必安裝額外的軟件包來運行您的應用程序,您可以針對正確的Java運行時測試您的應用程序,並確保在發貨之前沒有不兼容性。 令人遺憾的是,構建安裝程序會稍微復雜一些,而且下載量會更大。

當然,如果你想為Windows,Linux ectera提供你的應用程序,那么構建安裝程序會變得更加復雜,只提供一個可執行的jar會更簡單,但這不是客戶想要的體驗。 客戶不希望能夠下載一個應用程序並在Windows,osx和linux上運行相同的exe。 他們很高興
為每個平台安裝不同的安裝程序,並期望安裝程序以不同的方式工作。

我是這樣做的:

OSX:將AppBundler與捆綁的jre一起使用,放入帶有DMGCanvas的Dmg。 用戶只需將應用程序拖動到其/ Application文件夾即可。

Windows:使用帶有launch4j包裝的捆綁jre的Izpack,因此安裝程序可以作為exe運行。

Linux:使用沒有捆綁jre的Izpack,因為用戶linux用戶喜歡控制他們機器上的確切內容,但是指定允許的最小Java版本。 理想情況下,我應該為主要的Linux軟件包管理器創建軟件包,例如rpm,但我認為目前這不值得,因為Linux用戶只占我的客戶群的一小部分。

大多數安裝都是使用Maven和Ant自動完成的,因此構建這些不同的安裝程序並不是一件大事。

我們對生產中的商業產品具有相同的情況。 我們已經下載了特定版本的windows和linux JRE,並使用IzPack將其打包到應用程序中。

如果想要安裝應用程序,則必須安裝“我們的”JRE,並且無論系統安裝了JRE還是JDK,該應用程序都由該JRE運行。

缺點是:安裝程序適用於Windows或Linux,大小約為50 MB。 解壓縮時模塊的大小為:

  • app本身~5MB
  • libs~10 MB
  • JRE~90 MB

如果我想讓它更“獨立於平台”,我必須打包兩個JRE,安裝程序大約為100 MB。 它只對兩種類型的平台有效(見Cthulhu的回答)。

請注意,我們通過SSH進行大多數遠程安裝,並且使用壓縮選項至少會將打包時間增加約10倍(從幾分鍾到幾十分鍾)。

Oracle提供的一個相當新的解決方案是:

獨立包裝

它寫道:

獨立的應用程序包提供以下好處:

  • 用戶使用他們熟悉的安裝程序安裝應用程序,並以通常的方式啟動它。

  • 您可以控制應用程序使用的JRE版本。

  • 應用程序可以部署在新系統上,無需安裝JRE。

但這種方法的缺點是:

只能使用JDK 7 Update 6或更高版本構建自包含的應用程序包。

看看您是否計划分發此捆綁包(您的應用程序+ JRE),然后有一個實用程序install4J ,它是一個功能強大的多平台Java安裝程序構建器,可為Java應用程序生成本機安裝程序和應用程序啟動程序。

您可以使用java webstart部署它,這使您可以下載某個版本的jre(如果不存在)。 但是,我不知道是否可以降級。 Java也必須已經安裝。

您需要特定於平台的啟動程序,這些啟動程序使用放置在JAR文件旁邊的JRE。 當然,您可以使用批處理文件和shell腳本執行此操作,但是有更多專業解決方案可以創建本機啟動程序,例如install4j (免責聲明:我的公司開發install4j)。 免費的解決方案是izpack

這不是直接可能的。 為了實現這一點,您必須為每個平台下載VM。 對於Windows,將JRE復制到目錄和jar,並通過shell腳本調用分布式JVM。 但這很難,而且Cthulhu描述的解決方案是最好的,即檢查版本並指向網頁。

但是有一些你可能會檢查出來。

JSmooth - http://jsmooth.sourceforge.net/

Jar2Exe - http://transfer2pc.weebly.com/1/post/2011/10/jar2exe-converter-11-gui.html

如果它是NetBeans平台應用程序,NetBeans本身可以選擇捆綁其他資源和JRE。

資料來源: https//platform.netbeans.org/tutorials/nbm-nbi.html#bundling-jre

你可以看看oracle提供的jrecreate,它可能只是做你需要/想要的東西。

https://docs.oracle.com/javase/8/embedded/develop-apps-platforms/jrecreate.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM