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.

  1. Comment puis-je le réparer?
  2. dois-je installer le JDK, et configurer ma variable path vers le JDK au lieu de JRE?
  3. Quelle est la différence entre la variable PATH dans JRE ou JDK?
1404
demandé sur Taryn 2012-04-30 15:28:24

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 .

1789
répondu Juha Palomäki 2018-09-14 15:58:23

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.

333
répondu Vivek Kumar Ray 2012-06-28 06:48:56

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.

112
répondu Cacovsky 2014-07-23 18:34:23

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.

56
répondu ERJAN 2014-07-12 20:22:50

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!

38
répondu Brad Parks 2014-11-27 01:31:56

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 .

21
répondu Aniket Thakur 2014-07-12 20:28:01

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.

Source: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515

18
répondu Tony 2015-04-04 12:15:57

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.

16
répondu Andreas L. 2015-06-19 11:01:20

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.

14
répondu Rio 2013-06-25 12:51:24

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 paquet java-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.

14
répondu kenorb 2017-09-20 14:34:24

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é.

12
répondu Mandar Pandit 2014-07-12 20:29:21

lorsque j'ai installé JDK 1.7, le problème a été résolu.

12
répondu user3168034 2014-07-12 20:29:44

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.

12
répondu Ben 2014-11-07 14:28:54

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
11
répondu Mace Ojala 2016-03-22 21:13:06

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.

10
répondu Adit Ya 2014-07-12 20:52:33
  • 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:

    Enter image description here

  • 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:

    Enter image description here

10
répondu ethemsulan 2017-05-25 21:02:36

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.
8
répondu ckielstra 2014-07-12 20:43:38

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.

8
répondu Vihung 2016-11-18 12:19:14

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.

8
répondu Thamme Gowda 2018-03-30 20:33:32

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.

7
répondu L Lawliet 2014-11-07 14:25:34

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"..

6
répondu user3534268 2014-04-15 03:09:37

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 "

6
répondu oraclesoon 2014-07-12 20:51:17

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 .)

6
répondu Manohar 2017-05-25 21:05:03

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).

5
répondu Siddharth 2014-11-07 14:30:01

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
5
répondu TomTom 2015-04-09 09:10:19

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).

4
répondu Creative_Cimmons 2014-07-12 20:46:25

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

3
répondu Matthew Wise 2014-06-18 16:29:16

vous avez compilé votre classe Java avec JDK 7 et vous essayez d'exécuter la même classe sur JDK 6 .

3
répondu Sagar Varpe 2014-06-26 07:40:13
  • 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.
3
répondu siddmuk2005 2014-11-07 14:31:38

dans mon cas, le problème était dans la configuration d'exécution du serveur:

Server Runtime Environment

vérifiez que JRE est la version dont vous avez besoin:

enter image description here

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.

3
répondu Mike-Bell 2018-03-06 12:29:48