web-dev-qa-db-ja.com

OSXで./gradlewを実行しているときにJAVA_HOMEが無効なディレクトリに設定されている

Androidプロジェクトディレクトリから./gradlewを実行しようとしましたが、次のエラーが発生します:

エラー:Java_HOMEが無効なディレクトリに設定されています:/ライブラリ/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

ご使用の環境のJava_HOME変数を、Javaインストールの場所と一致するように設定してください。

私が試したこと:

  1. /Library/Java/JavaVirtualMachinesに移動します。 jdk1.8.0_11.jdkは存在しますが、存在しますjdk1.7.0_79.jdk

  2. which Java/usr/bin/Javaを出力します

  3. printenvプリント

...

Java_HOME = /ライブラリ/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home JDK_HOME = /ライブラリ/Java/JavaVirtualMachines/jdk1.8.0_11.jdk/Contents/Home

...

  1. javac -version印刷javac 1.8.0_11

  2. which javac印刷/usr/bin/javac

14
EGHDK

/ usr/libexec/Java_homeが存在するかどうかを確認します。もしそうなら、実行してみてください

export Java_HOME=`/usr/libexec/Java_home`

そしてgradlewビルドを再実行します。それが機能する場合は、それを永続化します

echo export "Java_HOME=\$(/usr/libexec/Java_home)" >> ~/.bash_profile
31
lodlock

このような問題を整理するために、.bash_profileに以下を追加しました。これには、setjdk {version}を実行し、Javaバージョンをその場で切り替えることができるという利点があります。

function setjdk() {
  if [ $# -ne 0 ]; then
   removeFromPath '/System/Library/Frameworks/JavaVM.framework/Home/bin'
   if [ -n "${Java_HOME+x}" ]; then
    removeFromPath $Java_HOME
   fi
   export Java_HOME=`/usr/libexec/Java_home -v $@`
   export PATH=$Java_HOME/bin:$PATH
  fi
}

function removeFromPath() {
  export PATH=$(echo $PATH | sed -E -e "s;:$1;;" -e "s;$1:?;;")
}

#Default JDK to Java 8
setjdk 1.8
1
gregwhitaker