[英]Embedding a JRE in a Swing application for Mac OS X
我必須發布帶有嵌入式JRE的swing應用程序。 帶有application + JRE + .bat / .sh的壓縮存檔為Windows和Linux提供了技巧。 用戶下載zip,解壓縮並啟動應用程序。 完善。
但是現在,我必須為Mac OS X提供相同的功能。我已經閱讀/被告知有很多不同的事情(禁止在Mac上發布JRE,相反,Mac上總是有JRE等。 ..),所以我真的很困惑我可以做什么。
有沒有人做過這樣的事情? 你是如何解決Mac應用程序部署的? 作為獎勵,在Mac上分發我的應用程序的最佳格式是什么(zip?)?
看一下java.net上的appbundler項目。 它提供了一個Ant任務,它將您的應用程序打包為普通的Mac .app
軟件包,並且可以選擇包含嵌入式JRE。
Mac上的整個Java環境有點混亂,因為我們仍然處於過渡時期,Apple 6提供和維護Java 6版本,Java 7版本直接來自Oracle。 通過提到的jarbundler項目a_horse_with_no_name是用於包裹了JAR作為.app
,將在附帶的Mac OS X 10.5 / 6/7的Apple提供的Java 6運行bundle,但不是在Oracle的Java 7,相反地appbundler目標Oracle Java 7及其.app
包不能在Java 6上運行。
如果你想定位運行10.7或10.8的最新Mac,特別是如果你想通過Mac App Store分發你的應用程序,那么你應該使用appbundler並捆綁一份JRE。 如果您不想通過商店分發,那么嵌入式JRE是可選的。 如果您的應用程序可以在Java 6上運行,那么使用jarbundler定位Apple Java 6將意味着您的應用程序可以在較舊的(<= 10.6)Mac上運行。 但是,當他們嘗試運行您的應用程序時,任何擁有最新Mac但只有Java 7的人都會被提示下載並安裝Java 6。
只要.app
內的所有Contents/MacOS
目錄(以及嵌入式JRE中的相應文件,如果適用)都在zip文件中標記了執行權限,就可以將.app
分發到.zip
存檔中。 如果您使用Ant構建,則需要使用帶有正確文件filemode
<zipfileset>
。
最簡單的方法使用與通過Java Web Start部署的任何其他平台相同的JAR。 我從未嘗試過使用它來安裝JRE。
提供更多的Mac友好的體驗, 最好的方法需要你來包裝你的應用程序包JAR(S),在文章中討論引用真實這里 。 首選的傳遞格式是壓縮磁盤映像 , .dmg
。
Mac OS X的Java部署選項一文比較了這兩個選項。 這個游戲是一個可以以任何方式啟動的例子。
附錄:對於好奇,Mac OS X Finder將.jnlp
文件視為文檔,默認情況下使用JWS啟動程序打開。 我在dock文件夾中保留了一些常用的.jnlp
文件的文件夾,以便快速訪問。 Java Preferences控制面板允許管理緩存的應用程序。 選擇安裝快捷方式會在目標文件夾中創建一個簡單的Mac應用程序包,並且可以像編輯其他任何內容一樣編輯包含的Info.plist
。 自定義.plist
的決定取決於應用程序所需的功能:屏幕菜單欄,停靠欄名稱和圖標,JNI路徑等。
我認為您可以放心地假設JRE已經存在於Mac上。
最好的格式(所以我被告知 - 我自己不是Mac用戶)是“App”包的tar.gz
(保存文件屬性)。
您可以使用“jarbundler”( http://sourceforge.net/projects/jarbundler/ )創建一個適當的Mac“捆綁”,可以毫不費力地提取。 確保捆綁包中的Stub在Ant tar
任務中標記為“可執行”。
我認為如果安裝了多個JRE,會出現一些問題。 在這種情況下,必須使用正確的Stub來啟動應用程序所需的JRE版本。 如果我/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
話,這個Stub位於/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub
有一個頁面表明Java7和jarbundler可能存在問題: http ://informagen.com/JarBundler/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.