2012-06-28 2 views
0

Я использую sun/oracle jdk 1.6.0_32, и компилятор javac, похоже, создает файлы классов для целевой версии 1.5 jvm, а не 1.6. Он не будет принимать -Известник 1.6 -target 1.6. Глядя на сгенерированный файл класса с помощью javap, вы видите основную версию: 49 не 50, как я ожидал. Eclipse Indigo правильно создает 1.6-совместимые файлы классов с основной версией: 50. Я впервые заметил это при использовании ant 1.8.2 в eclipse и не смог установить исходные или целевые атрибуты в 1.6. Есть ли что-то, что я делаю неправильно?Основная версия Java-класса

Добавление

У меня есть только 1 JDK (1.6.0_32) установлен. Из командной строки я получаю следующее.

[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ ls -al 
total 8 
drwxr-xr-x 2 ken ken 4096 2012-06-28 16:50 . 
drwxr-xr-x 3 ken ken 4096 2012-06-28 16:46 .. 
[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ javac -d /home/ken/projects/simpleHelloWorld/bin -version /home/ken/projects/simpleHelloWorld/src/com/kwcons/HelloWorld.java 
javac 1.6.0_32 
[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ ls -al 
total 12 
drwxr-xr-x 2 ken ken 4096 2012-06-28 16:50 . 
drwxr-xr-x 3 ken ken 4096 2012-06-28 16:46 .. 
-rw-r--r-- 1 ken ken 441 2012-06-28 16:50 HelloWorld.class 
[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ /usr/lib/jvm/java-6-sun/bin/javap -verbose HelloWorld |grep major 
    major version: 49 
[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ 

Это то, что я получаю, если я использую источник и -target.

[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ javac -d /home/ken/projects/simpleHelloWorld/bin -version -source 1.6 -target 1.6 /home/ken/projects/simpleHelloWorld/src/com/kwcons/HelloWorld.java 
javac 1.6.0_32 
javac: invalid source release: 1.6 
Usage: javac <options> <source files> 
where possible options include: 
    -g       Generate all debugging info 
    -g:none     Generate no debugging info 
    -g:{lines,vars,source}  Generate only some debugging info 
    -nowarn     Generate no warnings 
    -verbose     Output messages about what the compiler is doing 
    -deprecation    Output source locations where deprecated APIs are used 
    -classpath <path>   Specify where to find user class files 
    -cp <path>     Specify where to find user class files 
    -sourcepath <path>   Specify where to find input source files 
    -bootclasspath <path>  Override location of bootstrap class files 
    -extdirs <dirs>   Override location of installed extensions 
    -endorseddirs <dirs>  Override location of endorsed standards path 
    -d <directory>    Specify where to place generated class files 
    -encoding <encoding>  Specify character encoding used by source files 
    -source <release>   Provide source compatibility with specified release 
    -target <release>   Generate class files for specific VM version 
    -version     Version information 
    -help      Print a synopsis of standard options 
    -X       Print a synopsis of nonstandard options 
    -J<flag>     Pass <flag> directly to the runtime system 

[email protected]:~/projects/simpleHelloWorld/bin/com/kwcons$ 

Я получаю тот же результат от муравья в затмении.

+1

Сколько копий JDK вы установили? Каков результат 'javac -version'? –

+0

Я использую 1.6.0_21, и он отлично создает классы 1.6. Рассматривали ли вы сообщение об ошибке? – Antimony

+0

То же, что и Джонатан. Пожалуйста, разместите результат «javac -version». Я с трудом верю, что вы действительно получаете версию javac на Java 6. –

ответ

0

Попробуйте 1) в скрипте указать JDK версии

2) Написать follwing цель JAVAC внутри "компилировать" цели,

во время выполнения-LIBS :: Это будет указывать ваш проект Lib каталога. объявленной в свойствах.

<javac 
bootclasspath="${runtime-libs}/rt.jar" 
target="1.6" 
source="1.6" 
includeJavaRuntime="false" 
includeAntRuntime="false" 
debug="yes" 
destdir="${build-dir}"> 
<classpath refid="project.class.path"/> 
<src path="${code}"/> 
</javac> 
+0

Пробовал это, но я получаю [javac] Компиляция 1 исходного файла в/home/ken/projects/simpleHelloWorld/bin [javac] javac: недействительный целевой выпуск: 1.6 У меня есть только один jdk (1.6.0_32), и я считаю, использует правильный javac. Я также просто скомпилировал файл в терминале, и я получил файл класса, который javap говорит, является основной версией: 49 – Klb

+0

Я до сих пор привык к протоколу SO. В качестве ответа я поместил больше деталей в поток. – Klb

+0

в командной строке запустите команду «java -version» и проверьте, какая у вас версия java. –

Смежные вопросы