Bundle a Java 7 .jar for Mac

前端 未结 1 788
攒了一身酷
攒了一身酷 2020-12-31 12:29

I created a .jar that requires Java 7. I have Java 7 (JDK and JRE) and I can double-click to run the .jar. However, I want to package this into an application.

What

相关标签:
1条回答
  • 2020-12-31 13:00

    Issue

    You are definitely right with your assumption that Apples JavaApplicationStub located here:

    • System/Library/Frameworks/JavaVM.framework/Resources/MacOS/JavaApplicationStub

    is only compatible with Apples own Java Packages build for Mac OS X.

    Reason

    Apple is discontinuing their own Java System Packages and only supports Java 6 in their fade out process. Oracle took now over and provides Java 7 for Mac OS X from 10.7.3 on. Apple is even discontinuing developer tools like Jar Bundler.app without any notice, as you can see in this post:

    • Why is Jar Bundler gone in Mac OS X Mountain Lion 10.8.2

    Some people even tried desperately to manually increase the JVMVersion property value in Info.plist, read by Apples JavaApplicationStub, from a documented literal 1.6 or 1.6+ to an undocumented literal like 1.7. This won't work either and you will end up with a dialog like this, even if you have installed Oracles Java 7 Package.

    UserNotificationCenter

    So it is likely you will find other inconstancies between the retired Apple Java 6 world and the future Oracle Java 7 world.

    Solution

    To build an application packages based on Oracles Java 7 you need to use Oracles AppBundler Ant Task containing Oracles JavaAppLauncher. This one now only supports Oracles Java 7 for Mac OS X and isn't backwards compatible with Apples own Java System Packages.

    The good news now is, you can inline Oracles Java 7 JRE into your application package. It will be contained within the directory

    • Contents/PlugIns

    in the application package, for example

    • Contents/PlugIns/jdk1.7.0_17.jdk

    This means your application package is totally self contained and ready for App Store deployment.

    But you don't have to do that. You could also rely on the installed Oracle Java 7 Package.

    For a more detailed answer you should also checkout:

    • Application is using Java 6 from Apple instead of Java 7 from Oracle on Mac OS X?
    0 讨论(0)
提交回复
热议问题