2013-09-19 5 views
6

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

ответ

3

Какую оболочку вы используете и как именно вы установили JAVA_HOME? Grails должен уважать вашу настройку JAVA_HOME до тех пор, пока она видна команде grails, например, в 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 из вашей переменной PATH, как /usr/bin/java будет автоматически передавать в соответствующую java команду для текущего JAVA_HOME.

+0

Среда было. Я использую оболочку рыбы, и я не устанавливал правильный флаг в команде для экспорта переменной. Для записи правильная команда (используйте -x для экспорта): set -x JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home – kennbrodhagen

+1

Было бы здорово, если бы был способ сделайте это локально для grails, а не для всей системы ... – Spider

+1

@Spider Я бы просто создал сценарий оболочки где-то на вашем пути (например, '~/bin/grails'), который устанавливает JAVA_HOME, а затем делегирует подлинный скрипт grails , Или для одного проекта сделайте 'grails wrapper' и отредактируйте созданный' grailsw'. –

1

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

.gvm/bin/gvm-init.sh 

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

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

I есть Java 8 в моей машине, и здесь я устанавливаю java 1.7 для grails ТОЛЬКО.

+0

Да, это сработало для меня, даже на Ubuntu, где я определил Java 8 как java по умолчанию, используя «альтернативы». Мой профиль считает, что я запускаю Java 8 'javac -version' возвращает' javac 1.8.0_45', но grails игнорирует/usr/bin/javac и вместо этого ищет в нем JAVA_HOME/bin. – ben3000

0

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

  • Я бы set Java 8 as the default version после установив его с помощью 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.
  • This kinda работал, но вышеупомянутые env vars слишком сильно омрачили вещи.

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

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

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

1

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

0

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

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

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

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

Для получения дополнительной информации: SDKMAN local versions

Смежные вопросы