【问题标题】:How to package a Jar for OSX?如何为 OSX 打包一个 Jar?
【发布时间】:2013-08-02 18:04:37
【问题描述】:

我知道 JarBundler 不再开发并且不适用于 1.7 (link),并且我在同一个站点上发现了 AppBundler,它确实从 jar 中生成了正确的 .app 文件。

我发现here 这些 jar-apps 的内容是相同的,所以我按照人的建议做了,只替换了 Contents/Java(或旧 Jar Bundler 中的 Contents/Resources/Java)中的 jar 文件,并且有用。我可以继续使用 AppBundler,但我不希望 Ant 需要额外的依赖项/插件。

无论如何,当我使用 Ant 自动化它时 - .app 不会打开。我把它缩小到这个:

  • 从 AppBundler 生成的.app
  • 如果我将其复制并粘贴到其他位置,它会启动
  • 如果我用 Ant 复制并粘贴它,它不会启动

我什至尝试了clearing my application state cache 之类的东西,但没有运气。同样,奇怪的是,如果我自己复制“源应用程序”,副本就会启动。如果我用 Ant 复制源应用程序(并且我什么都不做)它不会。

这是我的 Ant sn-p(.app 只是文件夹 AFAIK)(dist.macapp.app 的名称):

<copy todir="${dist.dir}" >  
    <fileset dir="${resources.dir}">  
        <include name="${dist.macapp}/**" />
    </fileset>
</copy>

我想我有两个问题:

  1. 为什么这不起作用(我想我已经提供了足够的尝试:P)
  2. 有没有更好的方法来做到这一点(Java Web Start 是不可能的,也许我稍后会研究)

【问题讨论】:

    标签: macos ant jar


    【解决方案1】:

    Mac 上的 .app 文件只是一个标准化的文件夹布局。您总是可以自己将其与脚本捆绑在一起。仅仅替换 jar 文件是不够的。

    制作这样的东西

    Contents/
        Java/yourjar.jar
        info.plist /* specific to your application! maybe make a template then find and replace strings */
        MacOS/JavaApplicationStub
    

    将可执行文件/System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub 复制到MacOS 文件夹中(这不是特定于应用程序的,可以一次性完成)。

    我不确定 Java 特有的 info.plist 的格式。

    【讨论】:

    • 这就是我要说的。我正在尝试,但如果我使用 Ant 复制它,它不会启动(但如果我手动复制它就会启动)。
    • 至于“更换罐子”,我不确定你的意思是不够的。为了澄清,我已经生成了一个特定于应用程序的info.plist我唯一要做的就是复制和粘贴,它可以手动工作,但不能使用 Ant(这是我需要解决的第一个问题)
    • @Raekye 在我的示例中替换 yourjar.jar。 MacOS 文件夹呢,是否有 JavaApplicationStub 或等效脚本?
    • 是的。正如我所说,它是一个完整的.app,它自己工作,当我复制和粘贴它时它工作,但是当我用 Ant 复制它时它停止启动(我希望将应用程序存根放在一个单独的文件夹中,每当我构建复制它并更新里面的jar)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 2013-12-07
    • 2011-05-16
    • 2019-02-15
    • 2012-09-16
    相关资源
    最近更新 更多