【发布时间】:2014-10-08 05:17:08
【问题描述】:
我正在尝试将我的 Java 应用程序捆绑到 Mac OS X .app 捆绑包中。我目前正在使用appbundler,我关注了Oracle's guide。 Ant 任务在 Netbeans 中运行良好,并且正确构建了相应的 .app 包(在 Windows 上)。但是当尝试将 .app 包执行到我的 MacBookPro (OS X 10.7.5) 时,我在日志中收到以下错误:
[0x0-0x72072].ch.lawsuite.core.Servitus: Error: Unable to access jarfile LawSuiteSE.jar
我已经检查了 .jar 文件的权限,并且为 main-jar 和 lib 文件夹中的所有 jar 设置了执行位。
在终端输入以下内容时,应用程序运行良好:
java -jar /Applications/Servitus.app/Contents/Java/LawSuiteSE.jar --installer
为了澄清,这是最终的文件夹结构:
Servitus.app
|_Contents
|_Java
|_LawSuiteSE.jar
|_lib
|_lib1.jar
|_lib2.jar
|_subfolder1
|_lib3.jar
|_subfolder2
|_lib4.jar
|_etc...
|_MacOS
|_JavaAppLauncher
|_PlugIns
|_Resources
|_en.lproj
|_Localizable.strings
|_kplus.icns
|_Info.plist
|_PkgInfo
顺便说一句,我的应用程序有很多外部依赖项,都位于“lib”文件夹中,这些依赖项由可执行 main-jar 文件“LawSuiteSE.jar”的 MANIFEST.MF 文件中的 class-path 属性正确链接”。我需要在 appbundle-ant-task 中复制这些库,还是可以随后手动复制它们?
我也尝试在 MacBook Pro 上构建应用程序和对应的 .app 包,但同样的错误信息。
这是我的 Ant 任务:
<!-- Define the appbundler task -->
<taskdef name="bundleapp" classname="com.oracle.appbundler.AppBundlerTask"/>
<!-- Create the app bundle -->
<target name="bundle-macosx">
<bundleapp outputdirectory="macosx"
name="Servitus"
displayname="Servitus"
identifier="ch.lawsuite.core.Servitus"
shortversion="1.0"
applicationCategory="public.app-category.business"
icon="src/ch/lawsuite/data/icons/gmbh/osx/kplus.icns"
mainclassname="ch.lawsuite.core.Servitus">
<classpath file="dist/LawSuiteSE.jar"/>
<argument value="--installer"/>
</bundleapp>
</target>
编辑:我同时用一个小的运行脚本 (start.sh) 替换了 Contents/MacOS 中的 JavaAppLauncher:
#!/bin/bash
java -Xms256m -XX:PermSize=128m -jar /Users/salocinx/Workspace/LawSuiteSE.app/Contents/Java/LawSuiteSE.jar --installer
然后我还将 Info.plist 中的键 CFBundleExecutable 的值从 JavaAppLauncher 替换为 start.sh.
现在它工作正常,但我如何使用 jar 可执行文件的相对路径?像“../Java/LawSuiteSE.jar”这样的东西不起作用,给我和以前一样的错误。是否有任何常量指向当前的应用程序文件夹,例如“$APP_ROOT”,以便脚本看起来像:
#!/bin/bash
java -Xms256m -XX:PermSize=128m -jar $APP_ROOT/Contents/Java/LawSuiteSE.jar --installer
有什么想法吗?
【问题讨论】:
-
符号链接是否有效?通常,在 Windows 上构建时,符号链接会损坏。
-
好的,我按照以下指南检查并更新了 MacBook Pro 上的符号链接:monkehworks.com/…。但我仍然没有工作。接下来我将尝试在 MacBook 上构建我的应用程序。
-
构建整个项目并在 Mac 上捆绑包并没有帮助......仍然是同样的问题。
标签: java macos ant build jarbundler