【问题标题】:Running Ant with JDK 1.6 on Mac OS X在 Mac OS X 上使用 JDK 1.6 运行 Ant
【发布时间】:2010-10-16 06:31:33
【问题描述】:

我在 Mac OS X 上使用 JDK 1.6 运行 Ant 时遇到问题。即使在 OS X 的 Java 首选项中将 Java 应用程序版本设置为 Java SE 6,在终端中执行 java -version 也会显示 java version "1.6.0_07",Ant 似乎仍然存在使用 JDK 1.5 使用 JDK 1.5,因为它在编译我的代码时看不到 JDK 1.6 类。

我了解 Ant 依赖于 JAVA_HOME 环境变量来指定要使用的 JDK。但是,我不太明白如何在 Mac OS X 上设置此变量。

因此,我的问题是如何让Ant在Mac OS X上运行JDK 1.6。如果正确的方法仍然是设置JAVA_HOME环境变量,那么如何在OS X上设置变量。

【问题讨论】:

    标签: java macos ant


    【解决方案1】:

    JAVA_HOME 环境变量在您的主目录的 .profile 文件中设置。 (/Users/ejel/.profile ?)对其进行编辑并将其设置为您想要的。例如:

    export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    

    从现在开始,每次您打开一个新的终端窗口时,它都会将 JAVA_HOME 设置为这个新值。它不会随着任何现有的打开窗口而改变。

    如果您真的对将其放入配置文件感到震惊,或者如果它与其他软件冲突,则导出语句始终可以在终端中手动运行或进入运行一次的脚本(例如:setj6ev.sh)在开始运行 ant 任务之前。

    【讨论】:

    • 提供的解决方案实际上很简单并且有效。但是,Java 主目录的正确路径应该是 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    • 理想情况下,您应该使用 .../Versions/Current/Home 以便您可以在稍后阶段更改虚拟机的内容,而无需更新您的脚本 - 或者更好的是,.../ Versions/CurrentJDK/Home 如果您需要挂钩,例如编译器
    • @AlBlue:OP 的 ./Current/Home 指向 Java 5。您的建议无济于事。
    【解决方案2】:

    我已经添加了行

    export JAVA_HOME=`/usr/libexec/java_home`
    

    对于我的 .zshrc 文件,它似乎可以解决问题(.bash_profile 或其他,如果您使用 bash)。

    【讨论】:

    • 关于 OSX 的问题,它没有 /usr/libexec/java_home。在任何情况下,.zshrc 都是用于 zsh; OSX 上的默认 shell 是 bash。
    【解决方案3】:

    Ted,使用 Java Preferences 应用程序不会更改 /System/Library/Frameworks/JavaVM.framework/Versions 中的 CurrentJDK 符号链接,如果未设置 JAVA_HOME 环境变量,Ant 将使用该符号链接。因此,您可以手动更改该符号链接或设置 JAVA_HOME 环境变量,但如果您都不这样做,那么 Ant 将不会使用正确的 JDK。

    您可以通过在 build.xml 文件中发出 来查看 Ant 正在使用的 jdk 版本。

    【讨论】:

      【解决方案4】:

      在 .profile/.bashrc/.zshrc 中显式设置 JAVA_HOME 变量实际上并不是在 mac 上推荐的方法。我见过一些程序被明确设置为特定版本的 JAVA_HOME(例如带有一些 spring 资源的 grails 1.1)。

      设置您要使用的 Java 版本的正确方法是使用 /Application/Utilities/Java Preferences.app 应用程序。

      在那里,您将要使用的 java 版本拖到顶部。这将为所有应用程序启用该版本(包括从命令行运行的应用程序和通过 GUI 进程启动的应用程序)。

      您可以通过从命令行运行它来测试当前版本:

      java -version
      

      我实际上并不喜欢 mac 处理整个 java 符号链接目录和文件集的方式。这并不明显,人们经常把它搞砸。

      更多详情请参阅apple developer page

      【讨论】:

      • 正如我在问题中提到的,我已经在 J​​avaPreferences.app 中设置了 Java 的版本。执行“java -version”显示“1.6.0_07”。然而,Ant 似乎并不依赖这个属性,而是依赖于 JAVA_HOME 环境变量。
      • 对不起,我错过了原版。我确信这是由 Java Preferences 应用程序控制的,但是一些测试表明它不是。它控制 /System/Library/Frameworks/JavaVM.framework/Versions/Current 链接,而不是 CurrentJDK 链接。 WTF 是苹果的想法吗?
      【解决方案5】:

      我尝试了所有方法,但只有一件事对我有用:取消链接 CurrentJDK,并链接到 1.6:

      cd /System/Library/Frameworks/JavaVM.framework/Versions   
      sudo unlink CurrentJDK   
      sudo ln -sF "1.6" CurrentJDK  
      

      终于明白了:

      java -version   
      java version "1.6.0_22"
      

      希望对你有所帮助。

      【讨论】:

        【解决方案6】:

        您可能需要打开一个新的命令提示符实例,以便 shell 可以获取对环境变量的任何更改。

        【讨论】:

          猜你喜欢
          • 2012-10-12
          • 2011-08-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-20
          相关资源
          最近更新 更多