Je rencontre des problèmes de mise à niveau de JDK 1.7 -> 1.8 sous OSX. La mise à niveau est terminée, mais javac renvoie toujours 1.7 comme version.
J'ai téléchargé JDK 8_u5 à partir de la page d'accueil d'Oracle et exécuté le programme d'installation.
J'ai également pris les mesures suivantes, après l'installation:
> export Java_HOME=`/usr/libexec/Java_home -v 1.8` (Executed in my .bashrc file)
> echo $Java_HOME
/Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
> javac -version
javac 1.7.0_21
> $Java_HOME/bin/javac -version
javac 1.7.0_21
> $Java_HOME/bin/Java -version
Java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
J'ai parcouru et supprimé Java 1.7 (et toutes les autres versions JDK), puis réexécuté le programme d'installation:
> ls /Library/Java/JavaVirtualMachines
jdk1.8.0_05.jdk
Toujours pas utile, javac rapporte la version 1.7.0_21
> which javac
/usr/bin/javac
> ls -ltra /usr/bin/javac
[snipped] /usr/bin/javac -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/javac
Dans ce chemin, Current
est un lien symbolique vers A
. Le contenu de A/Commands
sont une série de fichiers (pas des liens symboliques).
> cd A/Commands
> ./javac -version
javac 1.7.0_21
> ./Java -version
Java version "1.8.0_05"
Java(TM) SE Runtime Environment (build 1.8.0_05-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.5-b02, mixed mode)
Suite à la publication d'origine, j'ai fait quelques recherches avec jenv , comme suggéré sur cette réponse .
> jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/Home
> jenv global Oracle64-1.8.0.05
> jenv version
Oracle64-1.8.0.05 (set by /Users/martypitt/.jenv/version)
> jenv info Java
Jenv will exec : /Users/martypitt/.jenv/versions/Oracle64-1.8.0.05/bin/Java
> jenv info javac
Jenv will exec : /Users/martypitt/.jenv/versions/Oracle64-1.8.0.05/bin/javac
> javac -version
javac 1.7.0_21
Cela jette des dispersions sur mes pensées que c'était un javac aléatoire tapi sur mon chemin, qui était en quelque sorte invoqué.
Pour être sûr, j'ai complètement détruit mon Java, et j'ai réessayé:
> cd /Library/Java/JavaVirtualMachines
> ls
jdk1.7.0_55.jdk
jdk1.8.0_05.jdk
> Sudo rm -rf *
> ls
<<empty>>
> Java -version
Java version "1.6.0_65"
> javac -version
javac 1.6.0_65
> which javac
/usr/bin/javac
J'ai ensuite re-téléchargé un nouvelle copie du programme d'installation et l'ai exécuté.
> Java -version
Java version "1.8.0_05"
> javac -version
javac 1.7.0_21
J'ai essayé de supprimer tous les JDK, XCode et tous les outils de développement, et de les réinstaller à nouveau. Mêmes résultats.
Cependant, je suis toujours perdu - où dois-je aller d'ici? Comment installer javac 1.8?
Si /usr/libexec/Java_home -v 1.8.0_05 --exec javac -version
retourne la version correcte, alors votre problème est avec:
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK
Avec un utilisateur privilégié, exécutez:
cd /System/Library/Frameworks/JavaVM.framework/Versions/
rm CurrentJDK
ln -s /Library/Java/JavaVirtualMachines/jdk1.8.0_05.jdk/Contents/ CurrentJDK
Solution trouvée dans Mankeh Blog
Vérifiez également cette réponse sur Super User pour changer dynamiquement les versions JDK.
Mise à jour: Je suppose que j'ai trouvé le coupable!
Essaye ça:
rm -rf ~/Library/Java/Extensions
Sudo rm -rf /Library/Java/Extensions
Solution trouvée dans: Java 1.7 sur OSX 10.9.2 fonctionnant en 1.5?
Pour les utilisateurs de Windows:
Il est possible que vous deviez changer votre variable PATH. Essayez de définir votre "% Java_HOME%/bin" comme entrée first dans le PATH.
Alors maintenant, cela ressemble à ceci:
PATH C:\Program Files\anyprogram;C:\Program Files\...;%Java_HOME%\bin
Et vous le changez comme ceci:
PATH %Java_HOME%\bin;C:\Program Files\anyprogram;C:\Program Files\...
Raison: Tout autre programme lance une autre Java version en premier.
Il s'agit (très probablement) d'un bogue dans le processus d'installation de jre8.
J'obtiens exactement le même comportement lorsque je navigue vers mon dossier jre8 , qui est celui que Windows (dans mon cas) affiche par défaut:
Lorsque vous accédez au répertoire jdk8, il affiche les éléments suivants:
Je viens de remarquer cependant que le jre ne livre jamais un javac , c'est donc un problème dans les paramètres de référence du système d'exploitation, alors je suppose.
Pour le corriger, vous devez corriger manuellement la référence javac dans votre système d'exploitation.
Ajoutant juste ma propre expérience ici, j'ai installé jdk-8u131-macosx-x64 d'Oracle. Tout fonctionnait parfaitement. Aucune variable d'environnement Java_HOME n'était présente ou nécessaire.
mehboob$ javac -version
javac 1.8.0_131
mehboob$ Java -version
Java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
La/System/Library a montré ceci:
mehboob$ ls -l /System/Library/Frameworks/JavaVM.framework/Versions/
total 64
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.4 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.4.2 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.5 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.5.0 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.6 -> CurrentJDK
lrwxr-xr-x 1 root wheel 10 Oct 17 2013 1.6.0 -> CurrentJDK
drwxr-xr-x 8 root wheel 272 Sep 9 2014 A
lrwxr-xr-x 1 root wheel 1 Oct 17 2013 Current -> A
lrwxr-xr-x 1 root wheel 59 Oct 17 2013 CurrentJDK -> /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents
Alors que/Library/Java avait ceci:
mehboob$ ls -l /Library/Java/
total 8
drwxrwxr-x 2 root admin 68 Oct 17 2013 Extensions
lrwxr-xr-x 1 root wheel 48 Oct 17 2013 Home -> /System/Library/Frameworks/JavaVM.framework/Home
drwxr-xr-x 3 root wheel 102 Jun 9 11:43 JavaVirtualMachines
Il n'y avait rien dans les extensions, alors que JavaVirtualMachines n'avait que le dossier jdk1.8.0_131.jdk.
Cela montre qu'une installation par défaut de JDK fonctionne correctement sans configuration supplémentaire requise.
Tout d'abord, vous devez télécharger puis installer le jdk8 ( http://www.Oracle.com/technetwork/Java/javase/downloads/jdk8-downloads-2133151.html )
Deuxièmement, faites quelques vérifications comme suit: Votre système a-t-il une utilisation non liée pour Shell Java 8 déjà? Essayez ceci dans votre terminal (oui, les apostrophes sont importantes):
$ '/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home/bin/Java' -version
s'il affiche "Java version" 1.8.0_131 "", vous pouvez passer à l'étape suivante.
Troisièmement, modifiez le bash_profile:
$ vi ~/.bash_profile
et tapez ceci:
Java_HOME="/Library/Internet Plug-Ins/JavaAppletPlugin.plugin/Contents/Home"
PATH=$Java_HOME/bin:$PATH
CLASSPATH=.:$Java_HOME/lib
export Java_HOME
export CLASSPATH
enregistrez-le et quittez, puis
source ~/.bash_profile
Après les étapes ci-dessus et vérifiez la version Java
$ Java -version
Java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
Vous pouvez peut-être supprimer le fichier .jar standard qui se trouve dans votre chemin de classe. Lorsque je supprime le pot dans /Library/Java/Extensions
, le problème sera résolu. Plus d'informations: erreur de compilation Java: Mac