java - studio - unsupported major.minor version 52.0 talend




Comment réparer java.lang.UnsupportedClassVersionError: Version major.minor non prise en charge (20)

Comment je le répare?

Cette erreur signifie que le JRE utilisé pour exécuter votre code de classe ne reconnaît pas la version de Java utilisée. Habituellement parce que la version de Java qui a généré votre fichier de classe (ie compilé) est plus récente.

Pour le réparer, vous pouvez soit

a) Compilez vos sources Java avec la même version, ou plus ancienne, du compilateur Java que celle utilisée pour l'exécuter. c'est-à-dire installer le JDK approprié.

b) Compilez vos sources Java avec la nouvelle version du compilateur Java mais en mode compatibilité. c'est-à-dire utiliser le paramètre -target .

c) Exécutez vos classes compilées dans un JRE qui est la même version, ou plus récente, que le JDK utilisé pour compiler les classes.

Vous pouvez vérifier les versions que vous utilisez actuellement avec javac -version pour le compilateur et java -version pour l'exécution.

Dois-je installer le JDK et configurer ma variable PATH sur le JDK au lieu de JRE?

Pour la compilation, certainement, installez et configurez le JDK spécifique que vous voulez.

Pour l'exécution, vous pouvez utiliser celui fourni avec le JDK ou un JRE autonome, mais peu importe, assurez-vous que vous avez installé les bonnes versions et que vous avez configuré votre PATH de manière à ce qu'il n'y ait pas de surprises.

Quelle est la différence entre la variable PATH dans JRE ou JDK?

La variable d'environnement PATH indique au shell de commande où rechercher la commande que vous tapez. Lorsque vous tapez java , l'interpréteur de shell de commande parcourt tous les emplacements spécifiés dans la variable PATH , de gauche à droite, pour trouver l'exécutable java runtime approprié à exécuter. 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é lors de l'exécution de gauche à droite sera celui qui est exécuté.

La commande du compilateur est javac et vient seulement avec le JDK. La commande d'exécution est java et vient avec le JDK et est dans le JRE.

Il est probable que vous ayez installé une version (51.0 = Java 7) de javac , et que vous ayez la même version de java installée, mais qu'une autre version précédente de java apparaisse plus tôt dans le PATH et soit invoquée à la place du celui que vous attendez.

J'essaie d'utiliser Notepad++ comme outil d'édition tout-en-un, exécution, compilation, etc.

J'ai JRE installé, et j'ai installé ma variable de chemin dans le répertoire ... / bin.

Lorsque je lance mon "Hello world" dans Notepad ++, j'obtiens 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 concerne les versions; une version de Java peut être ancienne ou trop récente.

  1. Comment je le répare?
  2. Dois-je installer le JDK et configurer ma variable de chemin vers le JDK au lieu de JRE?
  3. Quelle est la différence entre la variable PATH dans JRE ou JDK?

Aujourd'hui, ce message d'erreur est apparu dans notre Tomcat 7 sur Ubuntu 12.04.2 LTS (Precise Pangolin):

/var/log/tomcat7/localhost.2014-04-08.log:
8 avril 2014 09:00:55 org.apache.catalina.core.StandardContext filterStart
SEVERE: Exception démarrant filtre struts2
java.lang.UnsupportedClassVersionError: controller / ReqAccept: Version majeure non prise en charge 51.0 (impossible de charger la classe controller.ReqAccept)

L'application Struts est compilée avec Java 7.

Il s'est avéré que quelqu'un utilise "service tomcat [stop / start]" 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"

Ce qui provoque l'erreur "non pris en charge major.minor version 51.0".

Lorsque nous avons utilisé "/etc/init.d/tomcat7 [stop / start]" 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"


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, faites un clic droit sur le projet dans l'explorateur de paquets:

Build Path -> Configurer le chemin de construction

En dessous de:

Chemin de compilation Java -> Bibliothèques -> Ajouter une bibliothèque -> Bibliothèque système JRE -> JRE installé -> Rechercher .

Ajoutez le JRE requis en sélectionnant la bibliothèque dans la liste disponible une fois la recherche terminée.


Cette erreur signifie que vous essayez de charger un fichier "classe" Java 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.

Donc la solution est de:

  • Mettez à niveau votre environnement d'exécution Java ou
  • Recompilez la classe si vous avez la source, en utilisant votre compilateur Java local (si vous en avez un).

    javac FileName.java

Pour les développeurs, cela peut arriver si un autre développeur vérifie dans un fichier .class, et ils ont une version plus récente de Java que vous avez!


D'abord, nous allons avoir quelques notions de base ...

JRE est un composant de NetBeans / Eclipse / standalone qui va vous fournir des bibliothèques, des JVM, des plugins Java et un démarrage web Java. Notez qu'il ne fournit pas de compilateur ou de débogueur.

JDK est le surensemble de JRE avec des complificateurs et des débogueurs.

Donc, quand vous avez votre bibliothèque par défaut en JRE au lieu de JDK, vous allez avoir du bon temps pour importer des choses, mais ça ne compilera pas.

Au lieu de cela, définissez votre chemin vers JDK (j'utilise NetBeans, et je les configure en utilisant netbeans.conf dans netbeans / etc / netbeans.conf et changez le chemin).


Dans Eclipse, je suis juste allé à la commande de menu Fenêtre -> Préférences -> Java -> Compilateur , puis définissez "Niveau de conformité du compilateur" à la version 1.6.


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. La chose amusante était que l'exécution de Ant depuis la ligne de commande de Windows fonctionnait correctement, il devait donc y avoir un problème de configuration dans Eclipse.

Il s'est avéré que sous Eclipse, vous pouvez spécifier l'environnement dans lequel Ant doit être exécuté et cela a été défini comme JRE au lieu d'un JDK.

  • Allez dans: Exécuter -> Outils externes -> Configurations d'outils externes ...
  • Sélectionnez le fichier Ant build.xml pour votre projet (si vous avez plusieurs projets)
  • Activer l'onglet 'JRE'
  • Ici a été sélectionné 'Separate JRE: jre6'. Quand j'ai changé cela en JDK de la série 1.6 ou 1.7, l'erreur était partie.

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:

  • Faites un clic droit sur vos propriétés de projet -> Chemin de construction Java -> Bibliothèques

  • Sélectionnez votre bibliothèque système JRE et cliquez sur Modifier à droite, puis choisissez le JRE cible.

  • Maintenant, allez à Java Compiler sur la gauche, et changez le niveau de conformité du compilateur à votre cible.

Cela a fonctionné pour moi.


J'ai eu une situation similaire sur Mac, et le processus suivant a fonctionné pour moi:

Dans le terminal, tapez

vi ~/.profile

Ensuite, ajoutez cette ligne dans le fichier et enregistrez

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk<version>.jdk/Contents/Home

où la version est celle sur votre ordinateur, comme 1.7.0_25 .

Quittez l'éditeur, puis tapez la commande suivante pour la rendre effective

source ~/.profile 

Puis tapez java -version pour vérifier le résultat

java -version 

Qu'est-ce .profile fichier .profile ?

Le fichier .profile est un fichier caché. C'est un fichier facultatif qui indique au système les commandes à exécuter lorsque l'utilisateur dont le fichier de profil est connecté. Par exemple, si mon nom d'utilisateur est bruno et qu'il y a un fichier .profile dans / Users / 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


J'ai rencontré le même problème lorsque je travaillais avec un script Ant pour créer mon application.

J'utilise Eclipse pour mon développement d'application, et j'ai changé la version du compilateur dans les propriétés de construction du projet. Mais ça n'a pas marché pour moi. Puis j'ai découvert que je peux fournir la version du compilateur dans le script Ant.

J'ai modifié le script Ant à la section où il compile les fichiers Java.

<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 majeur non pris en charge.


Le numéro de version indiqué décrit la version de JRE avec laquelle le fichier de classe est compatible.

Les principaux nombres signalés sont:

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 résoudre le problème, vous devez essayer d'exécuter le code Java avec une version plus récente de Java JRE ou spécifier le paramètre cible dans le compilateur Java pour demander au compilateur de créer du code compatible avec les versions antérieures 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 risquez d'obtenir un avertissement indiquant que le chemin de la classe bootstrap n'est pas défini. Plus d'informations sur cette erreur sont disponibles dans l'article de blog Nouvel avertissement javac pour la définition d'une source plus ancienne sans bootclasspath .


Le problème le plus courant est la mauvaise configuration de votre variable JAVA_HOME qui doit pointer vers la bonne bibliothèque Java Development Kit, si vous en avez plusieurs.

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 vérifiez quels 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 à jour le paquet approprié via:

yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel

Le paquetage java-1.7.0-openjdk contient uniquement Java Runtime Environment. Si vous voulez développer des programmes Java, installez le paquet java-1.7.0-openjdk-devel .

BSD

Il y a un paquet OpenJDK 7 dans la collection Ports de FreeBSD appelé openjdk7 qui doit probablement être reconfiguré.

Voir: page wiki OpenJDK .

les fenêtres

Installez simplement la bibliothèque Java SE Development Kit appropriée à partir du site Oracle ou installez-la

Jenkins

Si vous rencontrez ce problème avec Jenkins, consultez:

Cependant sélectionner la bonne version de Java (plus récent) avec update-alternatives devrait fonctionner.


Ne t'inquiète 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

Etc.


Oh Mac OS XI a pu 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

Une autre façon de résoudre ce problème sur Mac OS X avec Homebrew est la suivante:

brew install Caskroom/cask/java

Votre fichier Java est compilé avec une version différente (version supérieure du compilateur) que la version (version d'exécution inférieure) avec laquelle vous essayez de l'exécuter.

Il est fondamental de comprendre que les classes compilées avec des versions inférieures devraient fonctionner dans les versions supérieures ultérieures. Mais le contraire (compilé avec une version supérieure du compilateur et essayant de l'exécuter avec une version d'exécution inférieure) n'est pas toujours possible.

Par conséquent vous êtes montré cette erreur, en essayant d'exécuter votre programme. Version major.minor non prise en charge

Q: J'ai créé une application dans Java 7, mais lorsque mes utilisateurs tentent de l'exécuter, ils reçoivent une erreur majeure non prise en charge major.minor version 51.0. Qu'est-ce que cela signifie et que puis-je faire à ce sujet?

R: Si vous compilez une application en utilisant javac dans Java 7, les classfiles obtenus auront le numéro de version 51.0. Les versions de Java antérieures à 7 ne reconnaissent pas ce numéro. Vos utilisateurs devront donc passer à Java 7 avant d'exécuter votre application. Si vous n'utilisez aucune API Java 7, vous pouvez essayer de compiler votre application en utilisant javac -target 1.6 pour créer un fichier de classe compatible avec la version 1.6. Si votre application est déployée à l'aide de webstart, vous pouvez spécifier la version minimale requise. Pour plus d'informations, consultez les documents sur Java Web Start et JNLP ici. Ce problème disparaîtra une fois que nous aurons déclenché autoupdate à Java 7 pour les utilisateurs finaux ayant actuellement Java 6 sur leurs postes de travail. Le calendrier pour cela n'est pas encore déterminé, nous voulons donner aux développeurs le temps de résoudre d'abord les problèmes entre leur code et JDK 7.

(Source: oracle.com .)


Vous avez utilisé une version supérieure du JDK pour compiler et essayer de lancer à partir d'une version inférieure de JDK / JRE .

Pour vérifier cela, consultez les informations de version:

javac -version

java -version

Ils seront différents et javac aura un numéro de version plus élevé.

Pour contourner ce problème, exécutez java à partir de la version JDK ou si vous avez un JRE / JDK plus récent qui fonctionnera aussi bien.

which javac vous dira l'emplacement, par exemple, /usr/bin/javac . Exécutez simplement directement en utilisant /usr/bin/java <program> .

OU vous pouvez définir la variable d'environnement en tant que solution permanente.


Vous essayez d'exécuter votre programme avec une version Java qui ne prend pas en charge la version dans laquelle le code a été compilé. Donc, fondamentalement, vous devez avoir compilé votre code avec une version supérieure et essayer de l'exécuter en utilisant une version inférieure.

Comme vous obtenez

Unsupported major.minor version 51.0

et la version 51.0 correspond à J2SE 7 vous avez très probablement compilé votre code en Java 7 et essayez de l'exécuter en utilisant une version plus basse. Vérifiez 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 PATH / JAVA_HOME. Ou vous pouvez compiler avec la même version que vous essayez 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 .


java.lang.UnsupportedClassVersionError se produit en raison d'un JDK supérieur pendant la compilation et d'un JDK inférieur pendant l'exécution.


  • Installez JDK 7.0.55 et définissez le Java pour Eclipse pour JDK 7.0.55.
  • Générez le projet avec JDK 7.0.55 en configurant sur le chemin de génération JDK 7.0.55.
  • Définissez le compilateur dans Eclipse pour JDK 7.0.55 par le menu Windows -> Préférences -> Java -> Compilateur - choisissez 1.7.




unsupported-class-version