2010-08-21 11 views
7

Sto cercando di compilare il codice estratto da SVN da un altro sviluppatore. Eclipse mi ha dato un sacco di problemi ultimamente.Eclipse non compilerà, file di classe scadente, versione errata

Qui sono le mie specifiche del progetto impostazioni: alt text

questo è ciò che la sezione di compilazione del mio file ant:

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

Quando compilo (usando Ant) ottengo un messaggio di errore:

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 

Cosa significa questo errore?

risposta

13

La versione del file di classe di 49.0 appartiene a Java 1.5.x, mentre quella di 48.0 appartiene a una versione di Java 1.4.x. La struttura del classfile era cambiata in 1.5 a causa dell'introduzione di diverse nuove funzionalità e modifiche apportate alla specifica del linguaggio Java.

Dall'errore, è possibile dedurre che era previsto un file di classe Java 1.4, mentre è stato trovato un file di classe Java 1.5. Sembra che il compilatore sia un compilatore Java 1.4, quindi dovresti provare a verificare se stai utilizzando la versione corretta del compilatore Java e anche il JDK corretto (ad es. JDK home).

ADDENDUM

Ant tende a cercare l'eseguibile javac nel $ JAVA_HOME/bin/javac. Se la variabile d'ambiente JAVA_HOME è stata impostata in modo errato, ad esempio in una casa Java 1.4, è probabile che si verifichi l'errore descritto anche in Eclipse.

ADDENDUM # 2

L'aggiunta di voci alla variabile d'ambiente PATH potrebbe comportare nel modificare il comportamento di ricerca classpath di Ant, possono dare luogo a tools.jar diverso in uso a scopo di compilazione le fonti. Ciò potrebbe essere dovuto al jvm.dll dall'installazione JRE 1.4.2 utilizzata per eseguire Eclipse (e quindi Ant).

+0

Come posso controllare la versione del compilatore Ant? –

+0

Bene, per impostazione predefinita questo tende ad essere la versione del compilatore nella home JDK (la configurazione di avvio di Eclipse può aiutare a identificare la casa). È possibile specificare un compilatore diverso utilizzando l'attributo eseguibile dell'attività javac Ant: http://ant.apache.org/manual/Tasks/javac.html –

+0

Non capisco, sto usando Java 1.6 JDK. Ho aggiunto uno screenshot al mio post. Perché dovrebbe essere importante? –

3

file di classe male: C: \ Program Files \ Java \ jre1.6.0_07 \ lib \ rt.jar (java/io/IOException.class)
file di classe è la versione sbagliata 49.0, dovrebbe essere 48,0

Si dice che il file di classe menzionato è stato compilato utilizzando un compilatore che genera file di classe della versione 49.0, mentre formica che venga compilato utilizzando un compilatore che genera file di classe della versione 48.0. Poiché la classe in questione fa parte di JRE, è necessario aggiornare il classpath nel proprio build.xml per includere i file di classe contenenti la versione JRE della versione 48.0.

+1

Umm, Java 6 ha la versione di classe 50.0. –

+0

@Vineet: Hmm, hai ragione. Stavo solo traducendo dal messaggio di errore. Ma questo non spiega perché 'IOException.class' in JRE 1.6 ha la versione 49.0 come indicato nel messaggio di errore? Ad ogni modo, ho generato la mia risposta per rimuovere le versioni specifiche di JRE. – BalusC

+0

buona presa. La versione 49.0 in un JRE 1.6 non ha senso. –

2

Sembra che si stia eseguendo Ant con un compilatore java versione 1.5 ma che si compila con le librerie di classi (rt.jar) di un'installazione 1.6. Dovresti configurare il tuo build.xml in modo che utilizzi in modo coerente sia (il compilatore che le librerie di classi) della stessa versione di java.

+0

Questo potrebbe essere il problema, dove lo specificherò? Nella build della formica dovrei aggiungere target = "1.5" source = "1.5" al comando compile? –

+0

Si trova nella "Configurazione degli strumenti esterni", ad esempio per avvio di formiche. Soprattutto controllare le schede JRE e Classpath. Il problema è probabilmente nell'impostazione di JRE, ma potresti aver aggiunto manualmente una versione diversa di rt.jar al Classpath. – Stroboskop

+0

Mi chiedo come sono riusciti a farlo? –

3

Prima di tutto le impostazioni del progetto non hanno nulla a che fare con il tuo script di compilazione. Le impostazioni del progetto indicano come Eclipse crea il tuo progetto, non come verrà eseguito il tuo file ant.

Per trovare sotto quale jvm viene eseguito, fare clic con il tasto destro del mouse sullo script di build in Eclipse e selezionare "Esegui come ...". Nella finestra di dialogo popup, vai alla scheda jvm e controlla quale jre viene utilizzato per eseguire il tuo script.

+1

Questo ha aiutato un po '. Non esiste una scheda JVM, ma la scheda JRE utilizza correttamente jre1.6.0_07. –

+1

Siamo spiacenti, non ho aperto Eclipse e ho fornito il nome di una scheda errata.Bene, dopo controllerei: 1. Se jre 1.4 è installato ovunque. 2. Se sono stati definiti JAVA_HOME o JRE_HOME e se sì, dove puntano. 3. Esegui java -version dalla riga di comando per vedere a quale java il tuo percorso punta. Se è 1,4, regolare l'ambiente del percorso in modo che punti a 1.6. – spbfox

0

Forse è necessario utilizzare JDK JRE che si trova in C: \ Program Files \ Java \ jdk \ jre, non pubblica

1

Si può provare a copiare tools.jarjdk/jre-common/lib di Tomcat.

ha funzionato per me, come dimostrato here

+0

ha funzionato 4 me, thnx – Mariah

2

Il messaggio di errore indica che lo strumento compilatore incluso nel tool.jar tua formica sta usando è di versione precedente rispetto alla classe tenta di compilare. Messaggio "Il file di classe [javac] ha una versione errata 50.0 dovrebbe essere 49.0" significherebbe che il tuo file di classe ha bisogno di jdk 6.0 ma il tuo tool.jar proviene dalla distribuzione di jdk 5.0. Per passare a corretti tools.jar in eclissi apri Finestra> Preferenze> Ant> Runtime> Voci globali.

0

È necessario modificare la versione Java per ANT anche perché se si sta utilizzando l'ambiente run time come JDK1.8 allora anche ANT dovrebbe essere puntato alla stessa versione o Ant dovrebbe riferirsi al file tools.jar da JDK1.8/posizione lib/tools.jar. Per risolvere questo problema, il tuo Eclipse passa a Finestra -> Preferenze -> Ant -> Runtime -> Voci globali. Qui controllare e aggiornare il percorso tools.jar con la versione più recente: C: \ Programmi \ Java \ jdk1.8.0_60 \ lib \ tools.jar

Quindi eseguire il problema di script di costruzione verrà risolto. :)

0

La modifica di tools.jar in eclissi sulla versione corretta l'ha corretta. Stavo usando jre 1.6 e ho dovuto cambiarlo per usare 1.8 per ottenere il file di classe nella versione 52.

Problemi correlati