应用程序在MacOSX上使用苹果的Java6而不是Oracle的Java7?
我正在用Mac OS X测试我当前的应用程序,Mac OS X安装了Oracle的Java 7。它使用的不是Oracle的Java7,而是苹果的Java6。应用程序在MacOSX上使用苹果的Java6而不是Oracle的Java7?,java,macos,bundle,java-7,Java,Macos,Bundle,Java 7,我正在用Mac OS X测试我当前的应用程序,Mac OS X安装了Oracle的Java 7。它使用的不是Oracle的Java7,而是苹果的Java6。java-version的默认系统输出显示为7 我尝试了不同网站上提到的大部分内容,但我无法解决这个问题 JAVA_HOME也已正确设置 我使用Mac仅用于测试目的。我真的需要一些指导 当我通过选择JRE 7在Eclipse中运行它时,它运行正常。因此,应用程序没有问题。我在Mac OS X上遗漏了一些东西 我的Java系统环境如下所示:
java-version
的默认系统输出显示为7
我尝试了不同网站上提到的大部分内容,但我无法解决这个问题
JAVA_HOME
也已正确设置
我使用Mac仅用于测试目的。我真的需要一些指导
当我通过选择JRE 7在Eclipse中运行它时,它运行正常。因此,应用程序没有问题。我在Mac OS X上遗漏了一些东西
我的Java系统环境如下所示:
- OSX版本
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
/usr/libexec/java_home
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home
echo$JAVA\u HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_12.jdk/Contents/Home/
- 未设置
JAVA_ARCH
/Library/Internet\plugins/JavaAppletPlugin.plugin/Contents/Home/bin/java-version
java version "1.7.0_12-ea"
java version "1.6.0_37"
ls/Library/Java/JavaVirtualMachines
jdk1.7.0_12.jdk
/System/Library/Frameworks/JavaVM.framework/Commands/java-version
java version "1.7.0_12-ea"
java version "1.6.0_37"
我猜我当前的JDK指向了错误的地方。应用程序所需的Java版本可能是在应用程序的元数据中指定的。如果右键单击应用程序并选择“显示软件包内容”,然后浏览到
Info.plist
文件,您应该可以找到定义应用程序将使用的JVM的条目。例如
<key>JVMVersion</key>
<string>1.5</string>
JVM版本
1.5
如果应用程序请求,OSX可能会选择使用较低的JVM。您的系统实际上不是最新的。我并不是说这导致了你的问题。但为了安全起见,我会将角色向前推进到最新和最伟大的
sudo rm-rf/Library/Java/JavaVirtualMachines/jdk1.7.0_12.JDK
。注意:这是安全的,因为在下一步中,我们将安装当前的Oracle JDK 1.7.0_17/usr/libexec/java_home-V
转储出去/usr/libexec/java_home
转储出去echo$JAVA\u HOME
转储出去的李>
/Library/Internet\plugins/JavaAppletPlugin.plugin/Contents/Home/bin/java-version
李>
/System/Library/Frameworks/JavaVM.framework/Commands/java-version
Objective-C
的JavaAppLauncher
二进制及其在Info中使用的格式。plist
仅适用于苹果的Java 6系统包,而来自Oracle的JavaAppLauncher
Info.plist组合仅适用于Oracle的Java 7软件包
当您使用支持Apple Java 6系统包的JavaAppLauncher
时,它将始终选择安装在Mac上的Apple Java 6系统包
有一次,Oracle Java平台Mac OS X端口的首席工程师Scott Kovatch在Devxx上详细介绍了针对Oracle Java 7的应用程序捆绑是如何工作的
解决方案
基于Mac OS X 10.7.3及更高版本创建应用程序包的步骤
- 包含Ant任务
/Library/Internet插件/JavaAppletPlugin.plugin/
MyJavaMacOSXApp.app/Contents/PlugIns/
- 下载并将其移动到
/lib/appbundler-1.0.jar
- 将以下内容添加到
</build.xml
<?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>
export JAVA_HOME=`/usr/libexec/java_home -v 1.7`
java -version java version "1.7.0_51" Java(TM) SE Runtime Environment (build 1.7.0_51-b13) Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)