应用程序在MacOSX上使用苹果的Java6而不是Oracle的Java7?

应用程序在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系统环境如下所示:

我正在用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系统环境如下所示:

  • 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。

您的系统实际上不是最新的。我并不是说这导致了你的问题。但为了安全起见,我会将角色向前推进到最新和最伟大的

  • 在Mac OS X 10.8.2上,通过系统更新使系统向前移动
  • 从Apple aka安装新的JRE 1.6.043
  • 从Apple aka安装新的JDK 1.6.043。为了获得Apple JDK,您必须使用您的Apple ID(免费开发者帐户)登录此处,并搜索术语“Java for OS X 2013-002开发者软件包”。不幸的是,这个包裹没有直接的联系
  • 删除过时的Oracle JDK:
    sudo rm-rf/Library/Java/JavaVirtualMachines/jdk1.7.0_12.JDK
    。注意:这是安全的,因为在下一步中,我们将安装当前的Oracle JDK 1.7.0_17
  • 下载并安装。注意:这也包括Oracle的JRE 1.7.0_17
  • 重新启动
  • 完成上述所有步骤后,请再次生成以下输出:

  • 您使用哪个OSX版本
  • 什么将命令
    /usr/libexec/java_home-V
    转储出去
  • 什么将命令
    /usr/libexec/java_home
    转储出去
  • 是什么将命令
    echo$JAVA\u HOME
    转储出去的
  • 是什么转储了命令echo$JAVA\u ARCH
  • 是什么转储了命令
    /Library/Internet\plugins/JavaAppletPlugin.plugin/Contents/Home/bin/java-version
  • 是什么将命令ls/Library/Java/JavaVirtualMachines转储出去的
  • 是什么转储了命令
    /System/Library/Frameworks/JavaVM.framework/Commands/java-version
  • 只需记录下你在原始问题中所做的步骤和努力。所以它反映了你的进步

    更新:解决方案是使用Oracles创建Mac OS X应用程序包。有关详细信息,请参见我的另一个答案:

    问题 您的Mac OS X应用程序捆绑包是使用与Oracle Java 7软件包不兼容的应用程序捆绑包创建的。例如,您使用的bundler可能是Apple提供的Jar bundler,它只适用于Apple的Java 6系统包

    苹果已经放弃了对Java作为一个集成系统包的支持,该系统包来自Java7和更高版本。因此,您必须选择Oracle Java 7第三方包及其应用程序包捆绑解决方案。这允许您在Mac OS X 10.7.3及更高版本上创建和部署基于Oracle Java 7的应用程序包

    您所面临的潜在技术问题是基于苹果本地
    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及更高版本创建应用程序包的步骤

    更重要的是,您必须使用Oracle的应用程序捆绑程序

    • 包含Ant任务
    使用Oracle的应用程序捆绑程序,您现在可以选择在Mac上安装默认Oracle Java 7软件包的情况下运行打包的应用程序:

    • /Library/Internet插件/JavaAppletPlugin.plugin/
    或者您在打包的应用程序中内联的Oracle Java 7 JRE

    • MyJavaMacOSXApp.app/Contents/PlugIns/
    注意:这两种方法都有优缺点,但如果你想带着捆绑的应用程序去苹果应用商店,你需要最后一种方法和你自己的JRE

    需要做什么
    • 下载并将其移动到
      /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)