在 Mac OS X 上使用 JDK 1.6 运行 Ant

12

我在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.6类。

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

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

6个回答

22

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。 - ejel
理想情况下,您应该使用.../Versions/Current/Home,这样您就可以在以后更改VM而无需更新脚本 - 或者更好的是,如果您需要连接到诸如编译器之类的东西,则使用.../Versions/CurrentJDK/Home。 - AlBlue
@AlBlue:OP 的 ./Current/Home 指向 Java 5。你的建议对其没有帮助。 - Stu Thompson

7
我已经添加了这行代码。
export JAVA_HOME=`/usr/libexec/java_home`

对于我的 .zshrc 文件,它似乎能够解决问题(如果你使用的是 bash,则是 .bash_profile 或其他文件)。

问题是关于OSX的,它没有 /usr/libexec/java_home。无论如何,.zshrc 是为 zsh 设计的;在OSX上默认 shell 是 bash。 - AlBlue

3
Ted,使用Java Preferences应用程序不会更改/System/Library/Frameworks/JavaVM.framework/Versions中的CurrentJDK符号链接,这是如果未设置JAVA_HOME环境变量,则Ant将使用的内容。因此,您可以手动更改该符号链接或设置JAVA_HOME环境变量,但如果您都不执行,则Ant将无法使用正确的JDK。
您可以通过在build.xml文件中发出来查看Ant正在使用的jdk版本。

2
我尝试了很多方法,只有一种方法对我有效:取消链接当前的JDK,然后链接到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"

我希望你能够受益于这个。

2
在Mac上,明确在.profile/.bashrc/.zshrc中设置JAVA_HOME变量并不是推荐的方法。有些程序会因为显式设置了JAVA_HOME到特定版本(例如使用一些Spring资源的Grails 1.1)而出现问题。
设置要使用的Java版本的正确方法是使用/Application/Utilities/Java Preferences.app应用程序。在那里,将您想要使用的Java版本拖到顶部。这将启用所有应用程序的该版本(无论是从命令行运行还是通过GUI进程启动的应用程序)。
您可以通过从命令行运行以下命令来测试当前版本:
java -version

我并不喜欢Mac处理整个Java符号链接目录和文件的方式。这并不明显,人们经常搞砸它。

有关更多详细信息,请参见Apple开发者页面


正如我在问题中提到的那样,我已经在JavaPreferences.app中设置了Java的版本。执行“java -version”会显示“1.6.0_07”。然而,Ant似乎并不依赖于这个属性,而是依赖于JAVA_HOME环境变量。 - ejel
抱歉,我在原文中漏掉了这一点。我本以为这是由Java Preferences应用程序控制的,但经过一些测试发现并非如此。它控制的是/System/Library/Frameworks/JavaVM.framework/Versions/Current链接,而不是CurrentJDK链接。苹果到底在想什么? - Ted Naleid

-1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接