我知道JarBundler不是专门开发的,不适用于1.7(链接),我在同一个网站上找到了AppBundler,它确实从jar中生成了正确的.app
文件。
我在这里发现这些jar应用程序的内容是相同的,所以我按照那个人的建议做了,只替换了Contents/Java
(或旧JarBundler中的Contents/Resources/Java
)中的jar文件,它就工作了。我可以继续使用AppBundler,但我不希望Ant需要额外的依赖项/插件。
无论如何,当我用Ant实现它的自动化时,.app
不会打开。我把范围缩小到:
- 由AppBundler生成的
.app
- 如果我复制并粘贴到其他地方,它就会启动
- 如果我用Ant复制并粘贴它,它就不会启动
我甚至尝试过清除应用程序状态缓存之类的操作,但没有成功。同样,奇怪的是,如果我自己复制"源应用程序",副本就会启动。如果我用Ant复制源应用程序(我没有做任何其他事情),它就不会。
这是我的Ant片段(.app
只是文件夹AFAIK)(dist.macapp
是.app
的名称):
<copy todir="${dist.dir}" >
<fileset dir="${resources.dir}">
<include name="${dist.macapp}/**" />
</fileset>
</copy>
我想我有两个问题:
- 为什么这不起作用(我想我已经提供了足够的尝试:P)
- 有没有更好的方法可以做到这一点(Java Web Start是不可能的,也许我稍后会研究)
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的格式。