2010-08-21 12 views
7

Próbuję skompilować kod sprawdzony z SVN od innego programisty. Eclipse ostatnio przysporzyło mi wiele problemów.Eclipse nie skompiluje, zły plik klasy, zła wersja

Oto moje ustawienia danego projektu: alt text

To właśnie sekcja kompilacji mojego mrówek pliku:

<target name="compile" depends="build-common, init" description="Compile files. "> 
    <javac srcdir="${src_dir}" destdir="${build_dir}" debug="true" > 
     <classpath path="${tomcat_home}/lib/servlet-api.jar;" /> 
    </javac> 
</target> 

kiedy mogę skompilować (używając Ant) pojawia się komunikat o błędzie:

compile: 
    [javac] Compiling 3 source files to H:\MYCOMPANY\portlets\build 
    [javac] H:\MYCOMPANY\portlets\src\com\mycompany\portlets\CourseList.java:3: cannot access java.io.IOException 
    [javac] bad class file: C:\Program Files\Java\jre1.6.0_07\lib\rt.jar(java/io/IOException.class) 
    [javac] class file has wrong version 49.0, should be 48.0 
    [javac] Please remove or make sure it appears in the correct subdirectory of the classpath. 
    [javac] import java.io.IOException; 
    [javac]    ^
    [javac] 1 error 

Co oznacza ten błąd?

Odpowiedz

13

Wersja pliku klasy 49,0 należy do Java 1.5.x, natomiast wersja 48.0 należy do jednej z wersji Java 1.4.x. Struktura plików klas zmieniła się w 1,5 ze względu na wprowadzenie kilku nowych funkcji i zmian wprowadzonych w specyfikacji języka Java.

Z błędu można wywnioskować, że oczekiwano pliku klas Java 1.4, natomiast plik klasy Java 1.5 został znaleziony. Wygląda na to, że kompilator jest kompilatorem Java 1.4, więc powinieneś spróbować sprawdzić, czy używasz odpowiedniej wersji kompilatora Java, a także odpowiedniego JDK (tj. JDK home).

DODATEK

Ant tendencję do poszukiwania wykonywalnego javac w $ JAVA_HOME/bin/javac. Jeśli zmienna środowiskowa JAVA_HOME została ustawiona niepoprawnie, powiedz domowi Java 1.4, istnieje prawdopodobieństwo uzyskania opisanego błędu nawet w środowisku Eclipse.

DODATEK # 2

Dodanie wpisów do zmiennej środowiskowej PATH może spowodować w zmianę zachowań wyszukiwania ścieżki klasy Ant, co może prowadzić w innym tools.jar wykorzystywane w celu sporządzenia żródła. Może to wynikać z faktu, że plik jvm.dll z instalacji JRE 1.4.2 jest używany do uruchamiania Eclipse (a tym samym Ant).

+0

Jak sprawdzić wersję kompilatora Ant? –

+0

Domyślnie jest to zazwyczaj wersja kompilatora w domu JDK (konfiguracja uruchamiania Eclipse może pomóc w identyfikacji domu). Można określić inny kompilator za pomocą wykonywalnego atrybutu zadania Ant javac: http://ant.apache.org/manual/Tasks/javac.html –

+0

Nie rozumiem, używam Java 1.6 JDK. Dodałem zrzut ekranu do mojego postu. Dlaczego to ma znaczenie? –

3

złe klasa plik: C: Program Files \ \ Java \ jre1.6.0_07 \ lib \ rt.jar (Java/IO/IOException.class)
Klasa plik ma nieprawidłową wersję 49,0, powinno być 48,0

Mówi się, że wspomniany plik klasy został skompilowany przy użyciu kompilatora, który generuje pliki klas wersji 49.0, podczas gdy ant oczekuje, że zostanie skompilowany przy użyciu kompilatora, który generuje pliki klasy wersji 48.0. Ponieważ dana klasa jest częścią środowiska JRE, musisz zaktualizować ścieżkę klas w swoim build.xml, aby dołączyć pliki klas zawierające JRE w wersji 48.0.

+1

Umm, Java 6 ma wersję klasy pliku 50.0. –

+0

@Vineet: Hmm, masz rację. Właśnie tłumaczyłem z komunikatu o błędzie. Ale to nie wyjaśnia, dlaczego "IOException.class" w JRE 1.6 ma wersję 49,0, jak podano w komunikacie o błędzie? W każdym razie uogólniłem moją odpowiedź, aby usunąć konkretne wersje JRE. – BalusC

+0

dobry połów. Wersja 49.0 w JRE 1.6 nie ma sensu. –

2

Wygląda na to, że używasz Anta z kompilatorem Java w wersji 1.5, ale kompilujesz go z bibliotekami klas (rt.jar) instalacji 1.6. Powinieneś skonfigurować plik build.xml, aby konsekwentnie używać zarówno (biblioteki kompilatora i klasy) tej samej wersji java.

+0

To może być problem, gdzie mogę to określić? W wersji ant, czy powinienem dodać polecenie = "1.5" source = "1.5" do polecenia kompilacji? –

+0

Jest to w "Konfiguracjach narzędzi zewnętrznych", tj. W przypadku programu uruchamiającego ant. Szczególnie sprawdź karty JRE i Classpath. Problem jest prawdopodobnie w ustawieniu JRE, ale możesz ręcznie dodać inną wersję pliku rt.jar do ścieżki Clas. – Stroboskop

+0

Zastanawiasz się, jak udało im się to zrobić? –

3

Przede wszystkim ustawienia projektu nie mają nic wspólnego ze skryptem budowania. Ustawienia projektu informują, w jaki sposób Eclipse tworzy twój projekt, a nie w jaki sposób będzie uruchamiany plik ant.

Aby znaleźć, pod którym działa jvm ant, kliknij prawym przyciskiem myszy skrypt budowy w Eclipse i wybierz "Uruchom jako ...". W wyskakującym oknie przejdź do zakładki jvm i sprawdź, który skrypt jest używany do uruchomienia skryptu.

+1

To pomogło trochę. Nie ma karty JVM, ale karta JRE poprawnie używa jre1.6.0_07. –

+1

Niestety, nie miałem otwartego Eclipse i podałem niewłaściwą nazwę tabulatora.Cóż, w następnej kolejności sprawdzę: 1. Jeśli masz zainstalowaną wersję 1.4. 2. Jeśli zdefiniowano JAVA_HOME lub JRE_HOME, a jeśli tak, to gdzie one wskazują. 3. Uruchom java -version z wiersza poleceń, aby sprawdzić, na którą ścieżkę wskazuje twoja ścieżka. Jeśli wynosi 1,4, dostosuj środowisko ścieżki do punktu 1.6. – spbfox

0

Może trzeba użyć JDK JRE, który znajduje się w katalogu C: \ Program Files \ Java \ jdk \ jre, a nie publiczny

1

Można spróbować skopiować tools.jar z jdk/jre do common/lib Tomcat.

on pracował dla mnie, jak wykazano here

+0

to działało 4 ja, thnx – Mariah

2

Komunikat o błędzie oznacza, że ​​kompilator narzędzie zawarte w tool.jar Twój Ant używa jest starsza wersja niż klasy próbuje skompilować. Komunikat "Plik klasy [javac] ma błędną wersję 50.0 powinien być 49.0" oznaczałby, że Twój plik klasy wymaga jdk 6.0, ale plik tool.jar pochodzi z dystrybucji jdk 5.0. Aby przejść do poprawnego pliku tools.jar w środowisku Eclipse, otwórz Okno> Preferencje> Ant> Runtime> Global Entries.

0

Musisz zmienić wersję Javy dla ANT, ponieważ jeśli używasz środowiska Run-Time jako JDK1.8, to Twój ANT powinien być również skierowany do tej samej wersji lub Ant powinien odnosić się do pliku tools.jar z JDK1.8/lokalizacja lib/tools.jar. Aby naprawić ten problem, i Eclipse Przejdź do okna -> Preferencje -> Ant -> Runtime -> Global Entries. Tutaj sprawdź i zaktualizuj ścieżkę tools.jar z najnowszą wersją, jak poniżej: C: \ Program Files \ Java \ jdk1.8.0_60 \ lib \ tools.jar

Następnie uruchom swój skrypt budujący problem zostanie rozwiązany. :)

0

Zmiana pliku tools.jar w eclipse na poprawną wersję naprawiła go. Używałem jre 1.6 i musiałem go zmienić, aby użyć wersji 1.8, aby uzyskać plik klasy w wersji 52.

Powiązane problemy