Как заставить grails выбрать правильный JDK?

Я использую Mac OSX 10.8.5 с Java 1.7 Oracle, установленной в дополнение к 1.6 mac. У меня есть набор JAVA_HOME и JAVA_HOME/bin в передней части моего пути. Когда я запускаю компиляцию grails из командной строки, Я вижу, что он выбирает Java 1.6 вместо 1.7. Как заставить командную строку grails выбрать JDK, который я хочу?

➤ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
➤ echo $PATH
/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin /usr/local/share/npm/bin /Users/kbrodhagen/bin /Users/kbrodhagen/.rvm/bin /usr/bin /bin /usr/sbin /sbin /usr/local/bin /opt/X11/bin /usr/local/git/bin
➤ set -x JAVA_OPTS "-showversion"
➤ grails compile
java version "1.6.0_51"
Java(TM) SE Runtime Environment (build 1.6.0_51-b11-457-11M4509)
Java HotSpot(TM) 64-Bit Server VM (build 20.51-b01-457, mixed mode)

5 ответов


какую оболочку вы используете и как именно вы установили JAVA_HOME? Граали должны уважать ваши JAVA_HOME настройка до тех пор, пока она видна , например, в bash, вы должны export переменная, а не просто ее установка, в tcsh можно использовать setenv, а не set.

$ export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home

вы также можете удалить /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin С вашего пути как /usr/bin/java автоматически делегирует соответствующий текущего JAVA_HOME.


Если вы хотите локализовать версию Java только для Grails, лучший способ-отредактировать файл ниже,

.gvm/bin/gvm-init.sh

вы можете установить JAVA_HOME в этом файле, как показано ниже,

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_71.jdk/Contents/Home

У меня есть Java 8 в моей машине, и здесь я устанавливаю java 1.7 для grails только.


для нового метода SDKman вы можете экспортировать JAVA_HOME на [YOUR HOME]/.sdkman/candidates/grails/[concrete version or current]/bin/grails


мне нужно было переключаться между проектом Java 7/Grails 2.4.4 и проектом Java 8 / Spring 4 в Ubuntu 12.04, и некоторые вещи затрудняли это:

  • я установить Java 8 в качестве версии по умолчанию после установки с помощью sudo apt-get install oracle-java8-set-default, но это, по-видимому, создает /etc/profile.d/jdk.sh и /etc/profile.d/jdk.csh содержащих JAVA_HOME, JRE_HOME и другие env vars, которые помешали мне заменить JDK.
  • этой вроде работал, но выше env ВАР слишком все затуманивал.

в конце концов, я удалил оба вышеуказанных элемента из моей среды и файлов в /etc/profile.d а я:

  • измените JDK, запустив sudo update-java-alternatives -s java-8-oracle (или java-7-oracle), как указано в статье webupd8;
  • выполнить gvm чтобы установить текущие или стандартные граали и другие инструменты по мере необходимости

кажется более грязным, чем должно быть, но я думаю, что он работает сейчас.


Если вы используете SDKMAN для установки Grails (который является в настоящее время рекомендуемый метод), вы можете добавить любые версии Java, которые вы установили в SDKMAN, и он будет управлять ими для вас. Например:

sdk install java openjdk-8 /usr/lib/jvm/java-8-openjdk-amd64
sdk use java openjdk-8

обратите внимание, что это будет set JAVA_HOME для вашего пользователя, поэтому, если вы этого не хотите, вы можете рассмотреть один из других вариантов.

$ echo $JAVA_HOME
/home/user/.sdkman/candidates/java/current

дополнительные сведения: SDKMAN локальные версии