Próbuję używać Notepad ++ jako narzędzia do edycji, uruchamiania, kompilacji itp.
Mam zainstalowane środowisko JRE i ustawiłem zmienną ścieżki do .../bin
katalogu.
Kiedy uruchamiam mój „Hello world” w Notepad ++, pojawia się następujący komunikat:
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)
.........................................
Myślę, że problem dotyczy wersji; niektóre wersje Java mogą być stare lub zbyt nowe.
- Jak to naprawić?
- Czy powinienem zainstalować JDK i ustawić zmienną ścieżki do JDK zamiast JRE?
- Jaka jest różnica między
PATH
zmienną w JRE lub JDK?
Odpowiedzi:
Pokazany numer wersji opisuje wersję środowiska JRE, z którym plik klasy jest zgodny.
Podane główne liczby to:
(Źródło: Wikipedia )
Aby rozwiązać rzeczywisty problem, należy spróbować uruchomić kod Java z nowszą wersją środowiska Java JRE lub podać parametr docelowy kompilatora Java, aby instruować kompilator, aby utworzył kod zgodny z wcześniejszymi wersjami Java.
Na przykład, aby wygenerować pliki klas zgodne z Javą 1.4, użyj następującego wiersza poleceń:
W nowszych wersjach kompilatora Java prawdopodobnie pojawi się ostrzeżenie o braku ustawiania ścieżki klasy bootstrap. Więcej informacji na temat tego błędu znajduje się w poście na blogu Nowe ostrzeżenie javac dotyczące ustawiania starszego źródła bez ścieżki rozruchowej .
źródło
java.lang.UnsupportedClassVersionError
dzieje się z powodu wyższego JDK w czasie kompilacji i niższego JDK w czasie wykonywania.źródło
/etc/alternatives/java -> /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java
) na wersję używaną do kompilacji z javac rozwiązała gosudo update-alternatives --config java
aby to zrobić.W Eclipse po prostu przeszedłem do polecenia menu Okno -> Preferencje -> Java -> Kompilator, a następnie ustawiłem „Poziom zgodności kompilatora” na 1.6.
źródło
Nie martw się, mam to rozwiązane.
To jest naprawdę proste - musisz zainstalować BOTH JRE / JDK z tą samą wersją.
JRE 6 -> JDK 6
JRE 7 -> JDK 7
I tak dalej.
źródło
Ten błąd oznacza, że próbujesz załadować plik „klasy” Java, który został skompilowany z nowszą wersją Java niż zainstalowana.
Na przykład
.class
plik mógł zostać skompilowany dla JDK 7, a próbujesz uruchomić go z JDK 6.Zatem rozwiązaniem jest albo:
Zrekompiluj klasę, jeśli masz źródło, używając lokalnego kompilatora Java (jeśli taki masz).
javac nazwa_pliku.java
Dla programistów może się tak zdarzyć, jeśli inny programista sprawdzi plik .class, a oni mają nowszą wersję java niż ty!
źródło
Próbujesz uruchomić program z wersją Java, która nie obsługuje wersji, w której kod został skompilowany. Zasadniczo musisz więc skompilować kod z wyższą wersją i próbować uruchomić go przy użyciu niższej wersji.
Jak dostajesz
a wersja 51.0 odpowiada J2SE 7 , najprawdopodobniej skompilowałeś swój kod w Javie 7 i próbujesz uruchomić go przy użyciu niższej wersji. Sprawdź, co
java -version
wyświetla. Powinna to być wersja Java 7. Jeśli nie, wprowadź odpowiednie zmiany w PATH / JAVA_HOME. Lub możesz skompilować z tą samą wersją, którą próbujesz uruchomić kod. Jeśli konfiguracje są mylące, zawsze możesz podać ścieżkę bezwzględną/home/user/jdk1.7.0_11/bin/javac
i/home/user/jdk1.7.0_11/bin/java
.źródło
Miałem podobną sytuację na komputerze Mac i działał dla mnie następujący proces:
W terminalu wpisz
Następnie dodaj ten wiersz do pliku i zapisz
gdzie wersja jest wersją na twoim komputerze, np
1.7.0_25
.Wyjdź z edytora, a następnie wpisz następujące polecenie, aby stało się skuteczne
Następnie wpisz java -version, aby sprawdzić wynik
Co to jest
.profile
plik?Źródło: http://computers.tutsplus.com/tutorials/speed-up-your-terminal-workflow-with-command-aliases-and-profile--mac-30515
źródło
W menu Eclipse Okno -> Preferencje -> Java -> Kompilator zaznacz także „Konfiguruj ustawienia specyficzne dla projektu”.
Jeśli nadal występuje błąd w tej samej wersji Java: spróbuj ręcznie usunąć folder kompilacji projektu. Następnie uruchom ponownie Eclipse.
źródło
Możesz mieć skompilowaną bibliotekę JAR w Javie 7 i masz tylko Java 6 jako Java Runtime. Może się to zdarzyć w przypadku niektórych nowych bibliotek.
źródło
Najczęstszym problemem jest błędna konfiguracja
JAVA_HOME
zmiennej, która powinna wskazywać odpowiednią bibliotekę Java Development Kit, jeśli została zainstalowana wiele razy.Aby znaleźć lokalizację folderu Java SDK, uruchom następujące polecenia:
Debian / Ubuntu
Aby sprawdzić, którą java (openjdk) zainstalowałeś, sprawdź:
lub:
Aby to zmienić, użyj:
Przedrostek z,
sudo
jeśli jest wymagany.aby wybrać alternatywną wersję Java.
Lub sprawdź, które są dostępne do instalacji:
Przedrostek z,
sudo
jeśli jest wymagany.Następnie możesz zainstalować, na przykład:
Przedrostek z,
sudo
jeśli jest wymagany.Fedora, Oracle Linux, Red Hat
Zainstaluj / zaktualizuj odpowiedni pakiet poprzez:
BSD
W kolekcji portów FreeBSD znajduje się pakiet OpenJDK 7 o nazwie openjdk7, który prawdopodobnie wymaga ponownej konfiguracji.
Zobacz: strona wiki OpenJDK .
Windows
Wystarczy zainstalować odpowiednią bibliotekę Java SE Development Kit ze strony Oracle lub zainstalować
Jenkins
Jeśli masz problem z Jenkins, zobacz:
Jednak wybór odpowiedniej wersji Java (nowszej)
update-alternatives
powinien działać.źródło
Ten sam problem napotkałem, pracując ze skryptem Ant do zbudowania aplikacji.
Używam Eclipse do programowania aplikacji i zmieniłem wersję kompilatora we właściwościach kompilacji projektu. Ale to nie działało dla mnie. Potem dowiedziałem się, że mogę dostarczyć wersję kompilatora w skrypcie Ant.
Zmodyfikowałem skrypt Ant w sekcji, w której kompiluje on pliki Java.
Pomogło mi to rozwiązać nieobsługiwany poważny drobny problem.
źródło
Kiedy zainstalowałem JDK 1.7, problem został rozwiązany.
źródło
Mam ten sam problem z projektem napisanym w wersji 1.7 i próbowałem go wykonać w wersji 1.6.
Moje rozwiązanie w Eclipse:
Kliknij prawym przyciskiem myszy Właściwości projektu -> Ścieżka kompilacji Java -> Biblioteki
Wybierz bibliotekę systemową JRE i kliknij Edytuj po prawej stronie, a następnie wybierz docelową wersję JRE.
Teraz przejdź do kompilatora Java po lewej stronie i zmień poziom zgodności kompilatora na swój cel.
To działało dla mnie.
źródło
Jak odpowiedziało w innym miejscu kilka osób, program Java jest uruchamiany na starszej wersji języka Java niż ta, dla której został skompilowany. Musi zostać „skompilowany krzyżowo” w celu zapewnienia kompatybilności wstecznej. Innymi słowy, istnieje niezgodność między źródłową a docelową wersją Java.
Zmiana opcji w menu Eclipse nie odpowiada oryginalnemu plakatowi, który powiedział, że nie używa Eclipse. W OpenJDK javac w wersji 1.7 możesz kompilować krzyżowo dla 1.6, jeśli używasz parametrów
-source
i-target
, dodatkowo, podaj plik rt.jar wersji docelowej (czyli starszej) w czasie kompilacji. Jeśli faktycznie instalujesz środowisko JRE 1.6, możesz wskazać jego instalację (na przykład /usr/lib/jvm/java-6-openjdk-i386/jre/lib/rt.jar na Ubuntu, / usr / jdk / jdk1. Najwyraźniej 6.0_60 / jre / lib / rt.jar na SunOS. Niestety nie wiem, gdzie to jest w systemie Windows. Tak jak:Wygląda na to, że możesz po prostu pobrać plik rt.jar z Internetu i wskazać go. Nie jest to jednak zbyt eleganckie:
źródło
Oparte na tym...
W Eclipse kliknij prawym przyciskiem myszy projekt w eksploratorze pakietów:
Ścieżka kompilacji -> Konfiguruj ścieżkę kompilacji
Pod:
Ścieżka kompilacji Java -> Biblioteki -> Dodaj bibliotekę -> Biblioteka systemu JRE -> Zainstalowane środowiska JRE -> Wyszukaj .
Dodaj wymagane środowisko JRE, wybierając bibliotekę z listy dostępnej po zakończeniu wyszukiwania.
źródło
Jeśli używasz Maven, ustaw poziom kompilacji Java. Otwórz wiersz poleceń i napisz
java -version
dla swojego poziomu kompilacji:Jeśli korzystasz z IntelliJ IDEA, wybierz projekt → Plik → Ustawienia → Kompilacja wykonania wdrożenia → Kompilator → Kompilator Java . Następnie zmień kod bajtu na 1.7, tak jak na tym obrazku:
źródło
Jeśli napotykasz ten problem podczas korzystania z Maven , możesz skompilować kod za pomocą wtyczki Kompilator Maven .
UPDATE: set
source
itarget
do1.8
, jeśli używasz JDK 8.źródło
Miałem ten sam komunikat o błędzie podczas uruchamiania Anta z Eclipse, ale inne wymienione tutaj rozwiązania nie rozwiązały mojego problemu. Zabawne było to, że uruchomienie Anta z linii poleceń Windows działało dobrze, więc musiał to być problem z konfiguracją w Eclipse.
Okazało się, że w środowisku Eclipse można określić środowisko, w którym Ant powinien działać, i zostało to ustawione jako JRE zamiast JDK.
źródło
Ten błąd oznacza, że środowisko JRE używane do wykonania kodu klasy nie rozpoznaje używanej wersji języka Java. Zwykle dlatego, że wersja Java, która wygenerowała plik klasy (tj. Skompilowała go), jest nowsza.
Aby to naprawić, możesz albo
a) Skompiluj źródła Java za pomocą tej samej lub starszej wersji kompilatora Java, który będzie używany do jego uruchomienia. tj. zainstaluj odpowiedni JDK.
b) Skompiluj źródła Java za pomocą nowszej wersji kompilatora Java, ale w trybie zgodności. tzn. użyj
-target
parametru.c) Uruchom skompilowane klasy w środowisku JRE, które jest tej samej lub nowszej wersji, co pakiet JDK użyty do skompilowania klas.
Możesz sprawdzić wersje, których aktualnie używasz
javac -version
dla kompilatora ijava -version
środowiska wykonawczego.Do kompilacji z pewnością zainstaluj i skonfiguruj odpowiedni pakiet JDK.
W przypadku środowiska wykonawczego możesz użyć tego, który jest dostarczany z JDK lub samodzielnym JRE, ale niezależnie od tego, upewnij się, że zainstalowałeś odpowiednie wersje i że skonfigurowałeś PATH tak, aby nie było niespodzianek.
Zmienna środowiskowa PATH informuje powłokę poleceń, gdzie szukać wpisywanego polecenia. Podczas pisania
java
interpreter powłoki poleceń przejrzy wszystkie lokalizacje określone wPATH
zmiennej, od lewej do prawej, w celu znalezienia odpowiedniegojava
pliku wykonywalnego do uruchomienia. Jeśli masz zainstalowanych wiele wersji Javy - tzn. Maszjava
plik wykonywalny w wielu lokalizacjach określonych w zmiennej PATH, to pierwsza napotkana podczas przechodzenia od lewej do prawej będzie wykonywana.Polecenie kompilatora jest
javac
i jest dostarczane tylko z JDK. Komendajava
uruchomieniowa jest dostarczana wraz z JDK i znajduje się w JRE.Prawdopodobnie masz
javac
zainstalowaną jedną wersję (51.0 = Java 7) , a także taką samąjava
zainstalowaną wersję , ale inna poprzednia wersjajava
pojawia się wcześniej w ścieżce i dlatego jest wywoływana zamiast oczekiwanej .źródło
Użyłeś wyższej wersji JDK do kompilacji i próby uruchomienia z niższej wersji JDK / JRE .
Aby to sprawdzić, zobacz informacje o wersji:
Będą różne, a javac będzie miał wyższy numer wersji.
Aby obejść ten problem, uruchom java z wersji JDK lub jeśli masz nowszą wersję JRE / JDK, która również będzie działać.
which javac
poda ci na przykład lokalizację/usr/bin/javac
. Wystarczy uruchomić bezpośrednio za pomocą/usr/bin/java <program>
.LUB możesz ustawić zmienną środowiskową jako trwałe rozwiązanie.
źródło
Miałem ten problem, gdy wróciłem do Java 6 i próbowałem uruchomić klasy wcześniej skompilowane z Javą 7. To, co zadziałało, to Preferencje> java> kompilator -> ustaw poziom zgodności na 1.6 i co najważniejsze „skonfiguruj ustawienia projektu” ..
źródło
Dzisiaj ten komunikat o błędzie pojawił się w naszym Tomcat 7 na Ubuntu 12.04.2 LTS (Precise Pangolin):
Aplikacja Struts jest kompilowana z Javą 7.
Okazało się, że ktoś używa „usługi tomcat [stop / start]” do ponownego uruchomienia Tomcat 7,
Co powoduje błąd „Nieobsługiwana wersja główna. Mniejsza wersja 51.0”.
Kiedy użyliśmy „/etc/init.d/tomcat7 [stop / start]” do ponownego uruchomienia Tomcat 7, problem został rozwiązany.
źródło
Rozwiązałem to. Prowadziłem:
Błąd jest mylące
Unsupported major.minor version 51.0
. Sprawia to wrażenie, że wersja 51 (Java 7) nie jest obsługiwana. I powinniśmy używać Java 6.Błąd powinien być:
źródło
Twój plik Java jest skompilowany z inną wersją (wyższa wersja kompilatora) niż wersja (niższa wersja środowiska wykonawczego), z którą próbujesz go uruchomić.
Zrozumiałe jest, że klasy skompilowane z niższymi wersjami powinny działać w późniejszych wyższych wersjach. Ale odwrotnie (skompilowane z wyższą wersją kompilatora i próba uruchomienia go z niższą wersją środowiska wykonawczego) czasami nie jest możliwe.
Dlatego ten błąd jest wyświetlany podczas próby uruchomienia programu. Nieobsługiwana wersja główna. Mniejsza wersja xx
(Źródło: oracle.com .)
źródło
Och, Mac OS XI był w stanie rozwiązać ten problem, ustawiając zmienną JAVA_HOME:
źródło
Najpierw zrozummy podstawy ...
JRE jest składnikiem NetBeans / Eclipse / standalone, który dostarczy Ci bibliotek, JVM, wtyczek Java i Java web start. Pamiętaj, że nie zapewnia kompilatorów ani debuggerów.
JDK jest nadzbiorem JRE wraz z kompilatorami i debuggerami.
Więc jeśli masz domyślną bibliotekę jako JRE zamiast JDK, będziesz miło spędzić czas na importowaniu rzeczy, ale nie da się skompilować.
Zamiast tego ustaw swoją ścieżkę na JDK (używam NetBeans, i ustawiam je za pomocą netbeans.conf w netbeans / etc / netbeans.conf i zmieniam ścieżkę).
źródło
Miałem problem polegający na tym, że musiałem uruchomić kompilację Maven w moim projekcie z wiersza poleceń, aby przeprowadzić testy jednostkowe; jeśli dokonałem zmiany w klasie testowej i pozwoliłem Eclipse na jej automatyczną rekompilację, to pojawia się błąd „Nieobsługiwana wersja główna. mniejsza wersja 51.0”.
Mam zainstalowane JDK6 i JDK7, ale wszystkie moje ustawienia JRE wskazywały na 1.6, zarówno na pom, jak i na stronie właściwości projektu w Eclipse. Żadna ilość projektów aktualizacji Maven i / lub odświeżania nie rozwiązała tego.
W końcu spróbowałem zamknąć projekt i otworzyć go ponownie, i to wydawało się, że to naprawiło! HTH
źródło
Skompilowałeś swoją klasę Java za pomocą JDK 7 i próbujesz uruchomić tę samą klasę na JDK 6.
źródło
źródło
Odpowiedź dotyczy problemu:
Wyjątek w wątku „main” java.lang.UnsupportedClassVersionError: edu / stevens / cs549 / dhts / main / LocalContext: Nieobsługiwana wersja główna. Mniejsza wersja 52.0
Miałem ten sam problem. Dla tych, którzy mieli takie problemy w instancjach AWS ec2 i zostali w jakiś sposób przekierowani tutaj na to pytanie. Odpowiadam za nie i chciałbym podzielić się tym, jak to zrobiłem. Miałem problem, ponieważ instancje Amazon EC2 działały java w wersji 1.7 i być może mój projekt nie był z nim kompatybilny, ponieważ korzystałem z Maven i to było trochę wstępnie skonfigurowane dla java 1.8. Więc zainstalowałem nową wersję Java:
sudo yum -y install java-1.8.0
A następnie ważnym krokiem jest usunięcie starszej wersji:
Pamiętaj, aby usunąć go po zainstalowaniu nowej wersji, w przeciwnym razie ciągle będzie korzystać z tej samej starszej wersji i mam nadzieję, że rozwiąże to twój problem, co zrobił w moim przypadku.
źródło