amo*_*mod 35 java macos bundle java-7
我正在使用安装了Oracle的Java 7的Mac OS X测试我当前的应用程序.而是使用Oracle的Java 7,它使用的是Apple的Java 6.的默认的系统输出java -version
被示出7
.
我尝试了不同网站中提到的大部分内容,但我无法解决此问题.
JAVA_HOME
也正确设置.
我仅将Mac用于测试目的.我真的需要一些指导.
当我通过选择JRE 7运行Eclipse时,它运行正常.因此,应用程序没有任何问题.我在Mac OS X上遗漏了一些东西.
我的Java系统环境如下所示:
OS X版本
10.8
/usr/libexec/java_home -V
Matching Java Virtual Machines (3):
1.7.0_12, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk
1.6.0_37-b06-434, x86_64: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
1.6.0_37-b06-434, i386: "Java SE 6" /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)/usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
Run Code Online (Sandbox Code Playgroud)echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/
Run Code Online (Sandbox Code Playgroud)JAVA_ARCH
没有设定
/Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/java -version
java version "1.7.0_12-ea"
Run Code Online (Sandbox Code Playgroud)ls /Library/Java/JavaVirtualMachines
jdk1.7.0_12.jdk
Run Code Online (Sandbox Code Playgroud)/System/Library/Frameworks/JavaVM.framework/Commands/java -version
java version "1.6.0_37"
Run Code Online (Sandbox Code Playgroud)我想我现在的JDK指的是错误的.
Uwe*_*her 90
您的Mac OS X应用程序包是使用与Oracle的Java 7程序包不兼容的应用程序打包程序创建的.例如,您使用的捆绑包可能Jar Bundler
由Apple提供,仅适用于Apple的Java 6系统包.
Apple已经放弃了Java作为Java 7及更高版本的集成系统包的支持.因此,您必须使用Oracle Java 7第三方软件包及其应用程序包捆绑解决方案.这允许您在Mac OS X 10.7.3及更高版本上创建和部署基于Oracle Java 7的应用程序包.
您面临的基本技术问题是Apple Objective-C
基于本机的JavaAppLauncher
二进制文件,其使用的格式Info.plist
仅适用于Apple的Java 6系统软件包,而JavaAppLauncher
Info.plist
来自Oracle 的组合仅适用于Oracle的Java 7软件包.
当您使用JavaAppLauncher
支持Apple的Java 6系统软件包时,它将始终选择Mac上安装的Apple Java 6系统软件包.
有一个视频,甲骨文Java平台Mac OS X端口的首席工程师Scott Kovatch正在讨论DEVOXX关于Oracle Java 7的应用程序捆绑如何工作的详细信息.
基于Mac OS X 10.7.3及以后版本创建应用程序包
以上,您必须使用Oracle的应用程序捆绑器
使用Oracle的应用程序捆绑器,您现在可以选择在Mac上安装默认的Oracle Java 7软件包来运行打包的应用程序:
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
或者您在打包的应用程序中内联的Oracle Java 7 JRE
MyJavaMacOSXApp.app/Contents/PlugIns/
注意:这两种方法都有优缺点,但如果您想使用捆绑的应用程序访问Apple App Store,则需要使用自己的JRE进行最后一次.
appbundler-1.0.jar
并移至<project>/lib/appbundler-1.0.jar
将以下内容添加到您的 <project>/build.xml
<property environment="env" />
<taskdef
name="bundleapp"
classname="com.oracle.appbundler.AppBundlerTask"
classpath="lib/appbundler-1.0.jar" />
<target name="bundle">
<bundleapp
outputdirectory="dist"
name="MyJavaMacOSXApp"
displayname="My Java Mac OS X App"
identifier="com.example.MyJavaMacOSXApp"
shortversion="1.0"
applicationCategory="public.app-category.developer-tools"
mainclassname="com.example.MyJavaMacOSXApp">
<runtime dir="${env.JAVA_HOME}" />
<classpath file="dist/MyJavaMacOSXApp.jar" />
</bundleapp>
</target>
Run Code Online (Sandbox Code Playgroud)
注意:您需要替换MyJavaMacOSXApp
您的应用程序数据.您可以在此处找到一些其他AppBundlerTask
选项,因为此示例仅显示其最简单形式的工作方式.
运行bundle
目标后,ant bundle
您将MyJavaMacOSXApp.app
在<project>/dist
目录中找到.
<runtime dir="${env.JAVA_HOME}" />
元素?内联Oracle Java 7包(JRE)
上面的Ant目标从您的Java Java 7程序包(JRE)复制
JAVA_HOME
成
MyJavaMacOSXApp.app/Contents/PlugIns
因此,应用程序包完全是自包含的,根本不需要在目标系统上安装Oracle Java 7 Package(JRE).就像你在下面这样一个部署的屏幕截图中看到的那样MyJavaMacOSXApp.app
:
接线默认Oracle Java 7包(JRE)
如果要使用应用程序包目标Mac下安装的默认Oracle Java 7程序包(JRE)
/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/
你必须删除
<runtime dir="${env.JAVA_HOME}" />
bundle
任务中的元素.就像你在下面这样一个部署的屏幕截图中看到的那样MyJavaMacOSXApp.app
:
来源 MyJavaMacOSXApp.java
package com.example;
import java.awt.*;
import javax.swing.*;
public class MyJavaMacOSXApp extends JPanel {
public MyJavaMacOSXApp() {
JLabel versionLabel = new JLabel("java.version=" + System.getProperty("java.version"));
JLabel homeLabel = new JLabel("java.home=" + System.getProperty("java.home"));
setLayout(new BorderLayout());
add(versionLabel, BorderLayout.PAGE_START);
add(homeLabel, BorderLayout.PAGE_END);
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("MyJavaMacOSXApp");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyJavaMacOSXApp newContentPane = new MyJavaMacOSXApp();
newContentPane.setOpaque(true);
frame.setContentPane(newContentPane);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
只需添加<classpath file="dist/additional.jar" />
所需数量的条目即可.
注意:捆绑任务中的元素顺序不会在捆绑应用程序的运行时保留.当从源目录中读取s java.class.path
时,本机在运行时构建.JavaAppLauncher
*.jar
MyJavaMacOSXApp.app/Contents/Java
只是为了完整性,这是Info.plist
如下:
<?xml version="1.0" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>JavaAppLauncher</string>
<key>CFBundleIconFile</key>
<string>GenericApp.icns</string>
<key>CFBundleIdentifier</key>
<string>com.example.MyJavaMacOSXApp</string>
<key>CFBundleDisplayName</key>
<string>My Java Mac OS X App</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MyJavaMacOSXApp</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string></string>
<key>LSApplicationCategoryType</key>
<string>public.app-category.developer-tools</string>
<key>JVMRuntime</key>
<string>jdk1.7.0_17.jdk</string>
<key>JVMMainClassName</key>
<string>com.example.MyJavaMacOSXApp</string>
<key>JVMOptions</key>
<array>
</array>
<key>JVMArguments</key>
<array>
</array>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
此答案的重要文件基于:
还有一个维护良好的appbundler分叉,有更多的功能和错误修正.
归档时间: |
|
查看次数: |
39449 次 |
最近记录: |