[英]How to set a particular JRE version as default for my Java application running on JBoss
[英]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。
這是我做的:
dist
文件夾中 jre
文件夾復制到dist\\jre-win-1.7.0_04
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。 解壓縮時模塊的大小為:
如果我想讓它更“獨立於平台”,我必須打包兩個JRE,安裝程序大約為100 MB。 它只對兩種類型的平台有效(見Cthulhu的回答)。
請注意,我們通過SSH進行大多數遠程安裝,並且使用壓縮選項至少會將打包時間增加約10倍(從幾分鍾到幾十分鍾)。
Oracle提供的一個相當新的解決方案是:
它寫道:
獨立的應用程序包提供以下好處:
用戶使用他們熟悉的安裝程序安裝應用程序,並以通常的方式啟動它。
您可以控制應用程序使用的JRE版本。
應用程序可以部署在新系統上,無需安裝JRE。
但這種方法的缺點是:
只能使用JDK 7 Update 6或更高版本構建自包含的應用程序包。
看看您是否計划分發此捆綁包(您的應用程序+ JRE),然后有一個實用程序install4J ,它是一個功能強大的多平台Java安裝程序構建器,可為Java應用程序生成本機安裝程序和應用程序啟動程序。
您可以使用java webstart部署它,這使您可以下載某個版本的jre(如果不存在)。 但是,我不知道是否可以降級。 Java也必須已經安裝。
這不是直接可能的。 為了實現這一點,您必須為每個平台下載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.