Java可执行jar不能作为执行/在OS X上运行program.jar



使用Linux,我运行一些用Java编写的程序,方法是将它们压缩在带有清单文件的jar中,然后将它们放在添加到$PATH的个人目录中,如下所示:CCD_ 1。它在我指向控制台的任何目录中都能很好地工作,我甚至可以执行program.jar file1 | lessprogram.jar file1 > output.txt。它们就像是bin控制台程序一样工作。

然而,在OS X上,我无法复制相同的行为,我被迫用java -jar program.jar运行它们,否则会说-bash program.jar: cannot execute binary file

有没有一种方法可以让jar像在OS X上的Linux中那样运行?

编辑:

感谢Jean-Baptiste Yunès的回答:


从命令行

如果使用Xcode Organizer的一个模板构建一个新的JavaSwing应用程序,Xcode会自动生成一个应用程序包,其中包含一个默认的Info.plist文件。您可以直接在Xcode中或使用属性列表编辑器对Info.plist文件进行微调。有关使用Xcode进行Java开发的更多信息,请参阅Xcode帮助(可从Xcode的"帮助"菜单中获得)。

如果您想将现有的Java应用程序转换为OS X Java应用程序,请使用/Developer/Applications/Utilities中提供的Jar Bundler应用程序。它允许您获取现有的.classprogram.jar file2 file20文件,并将它们包装为应用程序捆绑包。Jar Bundler用户指南中提供了有关Jar Bundle的信息,包括教程。

要从命令行构建有效的应用程序捆绑包,例如,在shell脚本或Ant文件中,需要执行以下步骤:

设置正确的目录层次结构。顶级目录应使用后缀为.app的应用程序名称命名。

应用程序捆绑包的根目录应该有一个Contents目录。它应该包含一个MacOS目录和一个Resources目录。Java目录应该在Resources目录中。

目录布局应该如下所示:

YourApplicationName.app/
Contents/
>
MacOS/
资源/
Java/

/System/Library/Frameworks/JavaVM.framework/Versions/Current/Resources/MacOS/中的JavaApplicationStub文件复制到应用程序捆绑包的MacOS目录中。

在应用程序捆绑包的Contents目录中创建一个Info.plist文件。您可以从现有Java应用程序(如JarBundler)中的一个示例开始,然后对其进行修改或从头开始生成一个全新的示例。请注意,除非在此属性列表中设置了正确的属性,特别是MainClass键,否则应用程序捆绑包不会启动。

Contents目录中创建一个PkgInfo文件。它应该是一个纯文本文件。如果您尚未向ADC注册创建者代码,则内容应为APPL????。如果您已经注册了创建者代码,请将????替换为您的创建者代码。

将应用程序的图标文件放入Contents/Resources/目录中。使用Developer/Applications/Utilities中的Icon Composer可获得创建图标文件的帮助。

将Java.jar.class文件复制到Contents/Resources/Java/中。

使用/Developer/Tools/中的SetFile设置束位查找器属性。例如,/Developer/Tools/SetFile -a B YourApplicationName.app。有关SetFile的更多信息,请参阅手册页。

完成这些步骤后,您应该有一个可双击的应用程序捆绑包,其中包含您的Java应用程序。

OSX应用程序需要捆绑,因此请阅读Oracle Java OSX Distribution和Apple Java Bundles。之后,您将能够通过命令行启动它们(只需要求手动运行存根)。

最新更新