JAVA_HOME未正确定义,编译时出错。

11

我正在开发一款使用一些Java类的Cocoa应用程序。但是我遇到了一个错误:“JAVA_HOME未正确定义,我们无法执行/System/Library/Frameworks/JavaVM.framework/Home/bin/java”。我不知道如何解决这个问题。请帮帮我。

提前感谢大家。

6个回答

25
export JAVA_HOME=`/usr/libexec/java_home` is exactly what you want to do.

实际上,所有硬编码 /System/Library/Frameworks/JavaVM.framework/Versions/... 的 Apache 项目(或者任何项目)需要使用 /usr/libexec/java_home(如果存在)来确定 Java 是否已安装。这是您唯一可以知道 Java 是否已安装的方式。

将来,在 /System/Library/Frameworks/JavaVM.framework/Versions/ 中的符号链接将会被删除,如果这些项目想要使用 Oracle/OpenJDK JVM 进行加载,它们会更加严重地出现故障。


非常感谢 :) 你是否知道为什么不能使用双引号/直引号? - pasql
这个在重启后会保留吗? - IgorGanapolsky

2
在您的.bashrc文件中,添加以下行:
export JAVA_HOME=/usr
export PATH=$PATH:$JAVA_HOME

这对我很有帮助。

2
JAVA_HOME 设置为指向 .../Home 目录,而不是 java 二进制文件。例如:
export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home

你为什么要在首次设置环境变量?在OS X上,你不应该这样做...


例如,在运行Ant构建脚本时,这是必要的。 - IgorGanapolsky

2

0
有时候更改Java_HOME并不能解决问题,因为在Apache Ant脚本中,java_home是硬编码的。 如果更改JAVA_HOME后仍无法运行Ant,则可以尝试将默认的硬编码更改为您的JAVA_HOME在Ant脚本中,例如:
    $ vi /Users/apache-ant-1.8.3/bin/ant 
    #ant from line 83 to 93
    case "`uname`" in
      CYGWIN*) cygwin=true ;;
      Darwin*) darwin=true
               if [ -z "$JAVA_HOME" ] ; then
 #delete JAVA_HOME=XXXXX(default line) , and give JAVA_HOME ur java home url       




JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home
                           fi
                           ;;
                  MINGW*) mingw=true ;;
                esac

0
这也可能是由于未正确配置 jenv 而发生的,如果它已安装。
~/.bash_profile 中,应该有这 3 行:
export PATH="$HOME/.jenv/bin:$PATH"
eval "$(jenv init -)"
eval "$(jenv enable-plugin export)"

然后通过以下命令重新加载它:source ~/.bash_profile


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