1

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

我在这里发现这些jar-apps的内容是一样的,所以我按照人的建议做了,只替换了里面Contents/Java(或Contents/Resources/Java旧的Jar Bundler)的jar文件,它就可以工作了。我可以继续使用 AppBundler,但我不希望 Ant 需要额外的依赖项/插件。

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

  • .app由 AppBundler 制作的
  • 如果我将其复制并粘贴到其他地方,它会启动
  • 如果我用 Ant 复制并粘贴它,它不会启动

我什至尝试清除我的应用程序状态缓存之类的事情,但没有运气。同样,奇怪的是,如果我自己复制“源应用程序”,副本就会启动。如果我用 Ant 复制源应用程序(并且我什么都不做)它不会。

这是我的 Ant 片段(.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 是不可能的,也许我稍后会研究)
4

1 回答 1

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 的格式。

于 2013-08-01T17:18:30.607 回答