[英]Java executable jar cannot be executed as ./program.jar on OS X
使用Linux,我運行了一些用Java編寫的程序,方法是將它們壓縮在帶有清單文件的jar中,然后將它們放在添加到$ PATH中的個人目錄中,如下所示: program.jar file2 file2
。 它在我將控制台指向的任何目錄中都可以很好地工作,甚至可以執行program.jar file1 | less
program.jar file1 | less
或program.jar file1 > output.txt
。它們就像是bin控制台程序一樣工作。
但是在OS XI上無法復制相同的行為,我被迫使用java -jar program.jar
運行它們,否則會顯示-bash program.jar: cannot execute binary file
有沒有辦法使jar像在OS X上的Linux中一樣起作用?
編輯:
從命令行
如果使用Xcode Organizer的模板之一構建新的Java Swing應用程序,則Xcode會自動生成一個應用程序包,其中包含默認的Info.plist
文件。 您可以直接在Xcode中或使用“屬性列表編輯器”微調Info.plist
文件。 有關使用Xcode進行Java開發的更多信息,請參見Xcode幫助(可從Xcode的“幫助”菜單獲得)。
如果要將現有的Java應用程序轉換為OS X Java應用程序,請使用/Developer/Applications/Utilities
可用的Jar Bundler應用/Developer/Applications/Utilities
。 它允許您獲取現有的.class
或.jar
文件,並將它們包裝為應用程序捆綁包。 Jar Bundler用戶指南中提供了有關Jar Bundler的信息(包括教程)。
要從命令行(例如,在shell腳本或Ant文件中)構建有效的應用程序捆綁包,您需要執行以下步驟:
設置正確的目錄層次結構。 頂級目錄應使用后綴.app
來命名您的應用程序名稱。
在應用程序捆綁包的根目錄中應該有一個目錄目錄。 它應該包含一個MacOS目錄和一個Resources目錄。 Java目錄應位於Resources目錄中。
目錄布局應如下所示:
YourApplicationName.app/
Contents/
MacOS/
Resources/
Java/
將JavaApplicationStub
文件從/System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/
復制到應用程序捆綁包的MacOS
目錄中。
在應用程序捆綁包的Contents
目錄中創建一個Info.plist
文件。 您可以從現有Java應用程序(如Jar Bundler)中的示例開始,然后對其進行修改或從頭開始生成一個全新的示例。 請注意,除非您在此屬性列表中設置了正確的屬性,尤其是MainClass
鍵,否則應用程序捆綁包不會啟動。
在Contents
目錄中創建一個PkgInfo
文件。 它應該是純文本文件。 如果尚未在ADC中注冊創建者代碼,則內容應為APPL????
。 如果您已注冊創建者代碼,請替換????
與您的創建者代碼。
將應用程序的圖標文件放入Contents/Resources/
目錄。 使用Developer/Applications/Utilities
Icon Composer幫助創建圖標文件。
將您的Java .jar
或.class
文件復制到Contents/Resources/Java/
。
使用/Developer/Tools/
SetFile
設置捆綁包位Finder屬性。 例如, /Developer/Tools/SetFile -a B YourApplicationName.app
。 有關SetFile
更多信息,請參見手冊頁。
完成這些步驟之后,您將擁有一個包含Java應用程序的可雙擊應用程序捆綁包。
OSX Apps需要捆綁在一起,因此請閱讀Oracle Java OSX Distribution和Apple Java Bundles 。 之后,您將能夠通過命令行啟動它們(只需要求手動運行存根即可)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.