Błąd JAVA_HOME podczas kompilacji maven, wersja OSX-10.8.4

10
Error: JAVA_HOME is not defined correctly.
  We cannot execute
  /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java

Zaktualizowałem system OSX do wersji 10.8.4. Po aktualizacji OSX zaktualizowałem JDK i JRE do 7. Ale otrzymuję powyższy błąd, kiedy próbuję zbudować maven projektu.

Kiedy biegnę ls -al /System/Library/Frameworks/JavaVM.framework/Versions/

Otrzymuję poniższą odpowiedź

drwxr-xr-x  11 root  wheel  374 Jul 22 22:33 .
drwxr-xr-x  10 root  wheel  340 Jul 22 18:30 ..
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.4 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.4.2 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.5 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.5.0 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.6 -> CurrentJDK
lrwxr-xr-x   1 root  wheel   10 Jul 22 18:30 1.6.0 -> CurrentJDK
drwxr-xr-x   7 root  wheel  238 Jul 22 18:30 A
lrwxr-xr-x   1 root  wheel    1 Jul 22 18:30 Current -> A
lrwxr-xr-x   1 root  wheel   59 Jul 22 18:30 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents

Dla tego ls -al /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin

Nie widzę więcej treści w CurrentJDK.

W biegu /usr/libexec/java_home

Dostaję:

/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home

Jestem całkiem nowy w pracy z systemem OS X. Daj mi znać, jeśli mogłem przegapić jakiś punkt, aby odnieść sukces.

arvind406
źródło
Można uruchomić echo $JAVA_HOME, ls -al /System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bina ls -al /System/Library/Frameworks/JavaVM.framework/Versions/i dodać wynik do pytania?
nohillside
@patrix .bashrc -> export JAVA_HOME=/usr/libexec/java_home .profile -> export PATH=${JAVA_HOME}/bin:$PATH export CATALINA_HOME=/Library/Tomcat/Home .bashrc i .profile zawiera wyżej wymienione polecenia ..
arvind406,
@Patrix .. Widzę, że ścieżka Java nie została pobrana z pliku bashrc. Gdy ustawię JAVA_HOME z terminala osobno tylko wtedy będę mógł zbudować projekt. Dlaczego tak się dzieje? Dowolny pomysł ?
arvind406,

Odpowiedzi:

9

Apple zaleca ustawienie JAVA_HOME na „/ usr / libexec / java_home”.

To, co zadziałało, to zawijanie tego wokół $ (). Skończyłem konfigurowanie JAVA_HOME jak $ (/ usr / libexec / java_home) za pomocą następujących poleceń:

vim ~/.bash_profile 
export JAVA_HOME=$(/usr/libexec/java_home)
source ~/.bash_profile
hcpl
źródło
To działało dla mnie idealnie!
rdegges
2

/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home/bin/java jeśli istnieje, to Java dostarczana przez Apple, której najnowszą wersją byłaby JRE 1.6.

Aby skorzystać z Oracle JDK (java 7, o której wspomniałeś), użyj ścieżki / usr / bin / java, jeśli została w pełni zainstalowana. Należy pamiętać, że środowisko JRE jest przeznaczone tylko dla apletów Java i dlatego nie wpływa na / usr / bin / java

Aby uzyskać więcej informacji, zobacz dokumentację instalacji Oracle

i zanotuj stamtąd

Aby uruchomić inną wersję Java, podaj pełną ścieżkę lub użyj narzędzia java_home:

/usr/libexec/java_home -v 1.7.0_06 --exec javac -version

Aby uzyskać więcej informacji, zobacz stronę podręcznika java_home (1).

użytkownik151019
źródło
.profile -> export PATH = $ {JAVA_HOME} / bin: $ PATH export CATALINA_HOME = / Library / Tomcat / Home
arvind406
@arvind co oznaczają te komentarze?
user151019,
@ arvind406 tak, ale co to dodaje lub pyta o moją odpowiedź?
user151019,
poprzednie komentarze zostały skomentowane w niewłaściwym oknie. Przeprosiny. Po aktualizacji do 10.8 OSX zaktualizowałem JDK i JRE do 7. Ponownie zaktualizowałem pytanie. uprzejmie rzuć okiem i daj mi znać, jeśli gdzieś się mylę. Po uruchomieniu tego polecenia /usr/libexec/java_homeotrzymuję/Library/Java/JavaVirtualMachines/jdk1.7.0_25.jdk/Contents/Home
arvind406,
@ Mark .. Widzę, że ścieżka nie jest pobierana z pliku bashrc. Gdy ustawię JAVA_HOME z terminala osobno tylko wtedy będę mógł zbudować projekt. Dlaczego tak się dzieje? Dowolny pomysł ?
arvind406
1

Kliknij ten link: https://stackoverflow.com/a/44564303/5005676 Jeśli widzisz skrypt mvn: kod tutaj nie działa ---

Kroki debugowania i naprawy:

Krok 1: Otwórz skrypt mvn /Users/Username/apache-maven-3.0.5/bin/mvn (Otwórz za pomocą polecenia less, takiego jak: less /Users/Username/apache-maven-3.0.5/bin/mvn)

Krok 2: Znajdź poniższy kod w skrypcie:

  if [ -z "$JAVACMD" ] ; then
  if [ -n "$JAVA_HOME"  ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
    else
      JAVACMD="$JAVA_HOME/bin/java"
    fi
  else
    JAVACMD="`which java`"
  fi
fi

if [ ! -x "$JAVACMD" ] ; then
  echo "Error: JAVA_HOME is not defined correctly."
  echo "  We cannot execute $JAVACMD"
  exit 1
fi

Krok 3: Dzieje się tak, ponieważ zmienna JAVACMD nie została ustawiona. Więc wyświetla błąd.

Uwaga: aby to naprawić

export JAVACMD=Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/

Klucz: Jeśli chcesz, aby był to trwale otwarty plik emacs.profile

opublikuj polecenia i naciśnij Ctrl-x Ctrl-c (save-buffers-kill-terminal).

Shubham Verma
źródło