Comment corriger java.lang.UnsupportedClassVersionError: non pris en charge majeure.version mineure
j'essaie d'utiliser Notepad++ comme mon outil tout-en-un édite, exécute, compile, etc.
j'ai JRE installé, et j'ai configurer mon chemin à la variable ...répertoire /bin.
quand je lance Mon "Hello world" dans Notepad++, je reçois ce message:
java.lang.UnsupportedClassVersionError: test_hello_world :
Unsupported major.minor version 51.0
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
.........................................
je pense que le problème ici est au sujet des versions; une certaine version de Java peut être ancienne ou trop nouvelle.
- Comment puis-je le réparer?
- dois-je installer le JDK, et configurer ma variable path vers le JDK au lieu de JRE?
- Quelle est la différence entre la variable
PATH
dans JRE ou JDK?
30 réponses
le numéro de version indiqué décrit la version de JRE avec laquelle le fichier class est compatible.
les chiffres majeurs déclarés sont:
Java SE 11 = 55,
Java SE 10 = 54,
Java SE 9 = 53,
Java SE 8 = 52,
Java SE 7 = 51,
Java SE 6.0 = 50,
Java SE 5.0 = 49,
JDK 1.4 = 48,
JDK 1.3 = 47,
JDK 1.2 = 46,
JDK 1.1 = 45
(Source: Wikipedia )
pour corriger le problème réel, vous devriez essayer d'exécuter le code Java avec une nouvelle version de Java JRE ou spécifier le paramètre cible au compilateur Java pour demander au compilateur de créer du code compatible avec versions précédentes de Java.
par exemple, pour générer des fichiers de classe compatibles avec Java 1.4, utilisez la ligne de commande suivante:
javac -target 1.4 HelloWorld.java
avec les versions plus récentes du compilateur Java, vous êtes susceptible d'obtenir un avertissement concernant le chemin de classe bootstrap qui n'est pas défini. Plus d'informations sur cette erreur est disponible dans le blog post nouveau avertissement javac pour configurer une source plus ancienne sans bootclasspath .
java.lang.UnsupportedClassVersionError
se produit en raison d'un JDK plus élevé lors de la compilation et de JDK plus bas lors de l'exécution.
dans Eclipse, je viens de passer à la commande de menu fenêtre - > Préférences - > Java - > compilateur et puis mettre" Niveau de conformité du compilateur " à 1,6.
Ne vous inquiétez pas, je l'ai résolu.
c'est en fait simple - vous devez installer les deux JRE / JDK avec la même version.
JRE 6 - > JDK 6
JRE 7 - > JDK 7
et ainsi de suite.
cette erreur signifie que vous essayez de charger un fichier Java" class " qui a été compilé avec une version plus récente de Java que celle que vous avez installée.
par exemple, votre fichier .class
aurait pu être compilé pour JDK 7, et vous essayez de l'exécuter avec JDK 6.
ainsi la solution est soit à:
- mettez à jour votre Java runtime ou
-
Recompiler la classe, si vous avez la source, utiliser votre compilateur Java local (si vous en avez un).
javac nom de fichier.java
pour les développeurs, cela peut se produire si un autre développeur vérifie dans A.class file, et ils ont une nouvelle version de java que vous avez!
vous essayez d'exécuter votre programme avec une version Java qui ne supporte pas la version dans laquelle le code a été compilé. donc en gros, vous devez avoir compilé votre code avec une version supérieure et essayer de l'exécuter en utilisant une version inférieure.
Que vous obtenez
Unsupported major.minor version 51.0
et la version 51.0 correspond à J2SE 7 vous avez probablement compilé votre code dans Java 7 et essayer de l'exécuter en utilisant une version plus basse. Vérifier ce que java -version
affiche. Ce devrait être la version Java 7. Si ce n'est pas le cas, faites les changements appropriés dans le chemin/JAVA_HOME. Ou vous pouvez compiler avec la même version que vous tentez d'exécuter le code. Si les configurations sont confuses, vous pouvez toujours donner le chemin absolu /home/user/jdk1.7.0_11/bin/javac
et /home/user/jdk1.7.0_11/bin/java
.
j'ai eu une situation similaire sur Mac, et le processus suivant a fonctionné pour moi:
dans le terminal, type
vi ~/.profile
puis ajouter cette ligne dans le fichier, et enregistrer
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home
où la version est celle sur votre ordinateur, comme 1.7.0_25
.
quitter l'éditeur, puis taper la commande suivante la rendre effective
source ~/.profile
tapez alors java-version à vérifier le résultat
java -version
Qu'est-ce que .profile
fichier?
.le fichier de profil est un fichier caché. Il s'agit d'un fichier optionnel qui indique au système les commandes à exécuter lorsque l'utilisateur dont le fichier de profil se connecte. Par exemple, si mon nom d'utilisateur est bruno et il ya un .profil fichier dans /Utilisateurs/bruno/, tout son contenu sera exécuté pendant la procédure de connexion.
Dans l'Éclipse du menu Fenêtre -> Préférences -> Java -> Compilateur vérifier aussi "Configurer les Paramètres Spécifiques d'un Projet".
si vous avez toujours l'erreur avec la même version Java: essayez de supprimer le dossier de construction de votre projet manuellement. Puis redémarrez Eclipse.
vous pouvez avoir une bibliothèque JAR compilée en Java 7, et vous n'avez que Java 6 Comme exécution Java. Cela pourrait se produire avec de nouvelles bibliothèques.
le problème le plus courant est la mauvaise configuration de votre variable JAVA_HOME
qui devrait pointer vers la bonne bibliothèque Java Development Kit, si vous avez installé plusieurs versions.
pour trouver où se trouve le dossier Java SDK, exécutez les commandes suivantes:
jrunscript -e 'java.lang.System.out.println(java.lang.System.getProperty("java.home"));'
Debian / Ubuntu
pour vérifier quel java (openjdk) vous avez installé, vérifiez via:
dpkg -l "openjdk*" | grep ^i
ou:
update-java-alternatives -l
pour le changer, utilisez:
update-alternatives --config java
préfixe avec sudo
si nécessaire.
pour sélectionner la version java alternative.
ou de vérifier qui sont disponibles pour l'installation:
apt-cache search ^openjdk
préfixe avec sudo
si nécessaire.
ensuite vous pouvez installer, par exemple:
apt-get install openjdk-7-jre
préfixe avec sudo
si nécessaire.
Fedora, Oracle Linux, Red Hat
installer/mettre à niveau le paquet approprié via:
yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
le paquet
java-1.7.0-openjdk
ne contient que L'environnement Java Runtime. Si vous voulez développer des programmes Java, installez le paquetjava-1.7.0-openjdk-devel
.
BSD
il existe un paquet OpenJDK 7 dans la collection des logiciels portés FreeBSD appelé openjdk7 qui doit probablement être reconfiguré.
voir: OpenJDK wiki page .
Windows
il suffit d'installer la bibliothèque appropriée Java SE Development Kit à partir du Oracle site ou installer
Jenkins
si vous éprouvez ce problème avec Jenkins, voir:
cependant, sélectionner la bonne version de Java (plus récente) avec update-alternatives
devrait fonctionner.
j'ai fait face au même problème quand je travaillais avec un script Ant pour construire mon application.
j'utilise Eclipse pour le développement de mon application, et j'ai changé la version du compilateur dans les propriétés de construction du projet. Mais cela ne fonctionne pas pour moi. Puis j'ai découvert que je pouvais fournir la version du compilateur dans le script Ant.
j'ai modifié le script Ant dans la section où il compilait Java fichier.
<target name="build-java" depends="prepare-build">
<echo message="Compiling java files"/>
<javac ....
target="1.5"...
</javac>
</target>
cela a fonctionné pour moi pour résoudre le problème majeur mineur non supporté.
j'ai eu le même problème avec un projet écrit en 1.7 et essayé d'exécuter en 1.6.
Ma solution dans Eclipse:
-
clic Droit sur votre Projet Propriétés -> Java Build Path -> Bibliothèques
-
Sélectionnez votre bibliothèque système JRE et cliquez sur Edit sur la droite, et choisissez la cible JRE.
-
maintenant allez à compilateur Java à gauche, et changez le niveau de conformité du compilateur à votre cible.
ça a marché pour moi.
comme répondu ailleurs par plusieurs personnes, le programme Java est exécuté sur une version plus ancienne de Java que celle pour laquelle il a été compilé. Il doit être" crosscompiled " pour la compatibilité arrière. En d'autres termes, il y a un décalage entre les versions Java source et cible.
Modifier les options dans les menus Eclipse ne répond pas à l'affiche originale, qui a dit qu'il/elle n'utilise pas Eclipse. Sur OpenJDK javac version 1.7, vous pouvez crosscompile pour 1.6 Si vous utilisez paramètres -source
et -target
, plus fournir le rt.jar - fichier de la version cible (c'est-à-dire l'ancienne version) au moment de la compilation. Si vous installez réellement le 1.6 JRE, vous pouvez pointer vers son installation (par exemple, /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar sur Ubuntu, /usr/jdk/jdk1.6.0_60/jre/lib/rt.jar sur SunOS apparemment. Désolé, je ne sais pas où il est sur un système Windows). Comme ceci:
javac -source 1.6 -target 1.6 -bootclasspath /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar HelloWorld.java
Il semble que vous pouvez simplement télécharger rt.jar de L'Internet, et pointez-le vers lui. Mais ce n'est pas très élégant:
javac -source 1.6 -target 1.6 -bootclasspath ./rt.jar HelloWorld.java
basé sur ceci...
J2SE 8 = 52
J2SE 7 = 51
J2SE 6.0 = 50
J2SE 5.0 = 49
JDK 1.4 = 48
JDK 1.3 = 47
JDK 1.2 = 46
JDK 1.1 = 45
dans Eclipse, clic droit sur le projet dans l'Explorateur de paquets:
Build Path - > Configure Build Path
sous:
Java Build Path - > Libraries - > Add Library - > JRE System Library - > Installé JREs - > Recherche .
ajouter le JRE requis en sélectionnant la bibliothèque dans la liste disponible après la recherche est terminée.
-
si vous utilisez Maven, définissez votre niveau de compilation Java. Ouvrez une ligne de commande et écrivez
java -version
pour votre niveau de compilation: -
Si vous utilisez IntelliJ IDEA, sélectionnez projet → Fichier → Paramètres → Construire l'Exécution de Déploiement → Compilateur → Compilateur Java . Puis changer le code de byte en 1.7 comme cette image:
J'ai eu le même message d'erreur lors de L'exécution de Ant à partir D'Eclipse, mais les autres solutions mentionnées ici n'ont pas résolu mon problème. Ce qui est drôle, c'est qu'exécuter Ant à partir de la ligne de commande Windows fonctionnait très bien, donc cela devait être un problème de configuration dans Eclipse.
il s'est avéré que sous Eclipse vous pouvez spécifier l'environnement avec lequel Ant devrait tourner et cela a été défini comme un JRE au lieu d'un JDK.
- aller à: Run - > Outils Externes -> Configurations D'Outils Externes ...
- sélectionnez la construction Ant.xml pour votre projet (si vous avez plusieurs projets)
- activez L'onglet "JRE"
- ici a été sélectionné "Separate JRE: jre6". Quand j'ai changé ceci en JDK de la série 1.6 ou 1.7, l'erreur a disparu.
Comment puis-je le réparer?
cette erreur signifie que la JRE utilisée pour exécuter votre code de classe ne reconnaît pas la version de Java utilisée. Généralement parce que la version de Java qui a généré votre fichier de classe (c'est-à-dire l'a compilé) est plus récente.
pour le réparer ,vous pouvez soit
a) compilez vos sources Java avec la même version ou une version plus ancienne du compilateur Java que celle qui sera utilisée pour l'exécuter. c'est à dire installer le JDK.
B) compilez vos sources Java avec la nouvelle version du compilateur Java mais en mode compatibilité. i.e. utilisez le paramètre -target
.
c) exécutez vos classes compilées dans une JRE qui est la même version, ou plus récente, que la JDK utilisée pour compiler les classes.
Vous pouvez vérifier les versions que vous utilisez actuellement
javac -version
pour le compilateur, et java -version
pour le Runtime.
si j'installe le JDK, et configure ma variable PATH vers le JDK au lieu de JRE?
Pour la compilation, certainement, d'installer et de configurer les spécificités de JDK que vous voulez.
pour l'exécution, vous pouvez utiliser celui qui est livré avec le JDK ou un JRE autonome, mais malgré tout, assurez-vous que vous avez installé les bonnes versions et que vous avez configuré votre chemin de telle sorte qu'il y a pas de surprises.
Quelle est la différence entre la variable PATH dans JRE ou JDK?
la variable D'environnement PATH indique à l'interpréteur de commandes où chercher la commande que vous tapez. Lorsque vous tapez java
, la commande interpréteur de commandes vérifiera tous les emplacements spécifiés dans la variable PATH
, de gauche à droite, pour trouver l'exécutable d'exécution java
approprié. Si vous avez plusieurs versions de Java installées - c'est-à-dire que vous avez l'exécutable java
dans plusieurs emplacements spécifiés dans la variable PATH, alors le premier rencontré en allant de gauche à droite sera celui qui est exécuté.
la commande du compilateur est javac
et n'est fournie qu'avec le JDK. La commande runtime est java
et est fournie avec le JDK et se trouve dans le JRE.
il est probable que vous avez une version (51.0 = Java 7) de javac
installé, et vous avez aussi la même version de java
installé, mais qu'une autre version précédente de java
apparaît plus tôt dans le chemin et donc est invoquée à la place de celle que vous attendez.
si vous faites face à ce problème en utilisant Maven , vous pouvez croiser compiler votre code en utilisant le plug-in compilateur Maven .
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
.....
mise à JOUR: 151910920" et target
à 1.8
, si vous utilisez le JDK 8.
vous avez utilisé une version supérieure du JDK pour compiler et essayer d'exécuter à partir d'une version inférieure de JDK/ JRE .
pour vérifier cela, voir la version information:
javac -version
java -version
Ils seront différents et javac aura un numéro de version supérieur.
pour contourner cela, utilisez java à partir de la version JDK ou si vous avez un JRE/JDK plus récent qui fonctionnera aussi.
which javac
vous diront l'emplacement, par exemple, /usr/bin/javac
. Il suffit de lancer directement en utilisant /usr/bin/java <program>
.
OU vous pouvez définir la variable d'environnement comme une solution permanente.
a eu ce problème quand je suis revenu à Java 6 et ai essayé d'exécuter des classes précédemment compilées avec Java 7. Ce qui a fonctionné pour moi, C'est les préférences > java > compiler --> mettre le niveau de conformité à 1,6 et "configurer les paramètres du projet"..
Aujourd'hui, ce message d'erreur est apparu dans notre Tomcat 7 sur Ubuntu 12.04.2 LTS (Pangolin précis):
/var/log/tomcat7 / localhost.2014-04-08.log:
Apr 8, 2014 9:00: 55 AM org.Apache.Catalina.core.StandardContext filterStart
Sévère: Struts2
151990920" Java.lang.UnsupportedClassVersionError: controller / ReqAccept: major non supporté.version mineure 51.0 (impossible de charger le contrôleur de classe.ReqAccept)
l'application Struts est compilée avec Java 7.
Il s'est avéré, quelqu'un utilise "service tomcat [marche/arrêt]" pour redémarrer Tomcat 7,
$ ps-ef / grep java
tomcat7 31783 1 32 20: 13 ? 00: 00: 03 /usr/lib/jvm/default-java/bin/java...
$ / usr/lib/jvm / default-java / bin / java-version
version java "1.6.0_27 "
qui cause le " major non supporté.petite version 51.0 " erreur.
Lorsque nous avons utilisé "/etc/init.d/tomcat7 [marche/arrêt]" pour redémarrer Tomcat 7, le problème a été résolu.
$ ps-ef / grep java
tomcat7 31886 1 80 20: 24 ? 00:00: 10 /usr/local/java / jdk1.7.0_15 / bin / java
$ /usr/local/java / jdk1.7.0_15 / bin / java-version
version java "1.7.0_15 "
votre fichier Java est compilé avec une version différente (version de compilateur supérieure) de la version (version d'exécution inférieure) avec laquelle vous essayez de l'exécuter.
il est entendu que les classes compilées avec des versions inférieures sont censées s'exécuter dans les versions supérieures ultérieures. Mais le contraire (compilé avec la version supérieure du compilateur et essayant de l'exécuter avec la version inférieure de l'exécution) n'est pas toujours possible.
donc vous êtes montré ceci erreur, en essayant d'exécuter votre programme. major non supporté.version mineure X. x
Q: j'ai créé une application en Java 7, mais quand mes utilisateurs essaient de l'exécuter, il obtient un non pris en charge majeure.erreur de la version mineure 51.0. Quel est-ce que cela signifie Et Que puis-je y faire?
A: si vous compilez une application utilisant javac en Java 7, les classfiles résultants aura le numéro de version 51.0. Les Versions de Java prior to 7 ne reconnaît pas ce nombre, donc vos utilisateurs auront pour passer à Java 7 avant d'exécuter votre application. Si vous n'êtes pas en utilisant N'importe quel API Java 7 vous pouvez essayer de compiler votre application en utilisant javac-cible 1.6 Pour créer un classfile 1.6 compatible. Si votre l'application est déployée en utilisant webstart vous pouvez spécifier le minimum la version requise. Pour plus d'informations, voir les docs sur Java Web Start et JNLP ici. Ce problème partira une fois que nous aurons activé autoupdate pour Java 7 pour les utilisateurs finaux ayant actuellement Java 6 sur leur ordinateur de bureau. Le la chronologie n'est pas encore déterminée, nous voulons donner aux développeurs il est temps de régler tout problème entre leur code et JDK 7 d'abord.
(Source: oracle.com .)
je l'ai résolu. J'ai couru:
JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386
L'erreur est trompeur, Unsupported major.minor version 51.0
. Cela donne l'impression que la version 51 (Java 7) n'est pas supportée. Et on devrait utiliser Java 6.
l'erreur aurait dû être:
la version Java actuelle, 50, n'est pas supportée. Utilisez plutôt la version Java 7 (51: 0 et plus).
Oh, Mac OS X, j'ai été en mesure de résoudre ce problème en définissant la variable JAVA_HOME:
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_75.jdk/Contents/Home
commençons par les bases...
JRE est un composant de NetBeans / Eclipse / autonome qui va vous fournir des bibliothèques, JVM, Java plugins & Java web start. Notez qu'il ne fournit pas de compilateurs ou de débogueurs.
JDK est le super-ensemble de JRE avec les compliers et les débogueurs.
ainsi quand vous avez votre bibliothèque par défaut comme un JRE au lieu de JDK, vous on va passer un bon moment à importer des trucs, mais ça ne se compilera pas.
à la place, mettez votre chemin vers JDK (J'utilise NetBeans, et je les mets en utilisant netbeans.conf dans netbeans/etc/netbeans.conf et modifier le chemin d'accès).
j'ai eu le problème par lequel je devais exécuter une compilation Maven sur mon projet à partir de la ligne de commande pour exécuter mes tests d'unité; si j'ai fait un changement à la classe de test et laisser Eclipse le recompiler automatiquement, alors j'ai eu le" major non supporté.petite version 51.0 " erreur.
j'ai installé à la fois JDK6 et JDK7, mais tous mes paramètres JRE pointaient à 1,6, à la fois dans la pom et sur la page des propriétés du projet dans Eclipse. Aucun montant de Maven mise à jour Projet et / ou rafraîchissement résolu ce.
finalement j'ai essayé de fermer le projet et de le rouvrir, et cela a semblé le corriger! HTH
vous avez compilé votre classe Java avec JDK 7 et vous essayez d'exécuter la même classe sur JDK 6 .
- installez JDK 7.0.55 et mettez le Java pour Eclipse pour JDK 7.0.55.
- construisez le projet avec JDK 7.0.55 en configurant sur le chemin de construction JDK 7.0.55.
- définit le compilateur dans Eclipse pour JDK 7.0.55 par menu Windows - > Préférences - > Java - > compilateur - choisir 1.7.
dans mon cas, le problème était dans la configuration d'exécution du serveur:
vérifiez que JRE est la version dont vous avez besoin:
le projet était dans la version 1.7 et le serveur JRE a été défini comme 1.6, après avoir changé à la version java appropriée, il a lancé fine.