Javac Cross-Compilation с 1.7

Итак, ребята,

Я пытаюсь немного поиграть с компиляцией Javac Cross с Ant и на терминале. Локально и в среде интеграции, и у меня такая же проблема по самой основной проблеме.

Я запускаю это в терминале linux (а также на моем cygwin на окнах и cmd):

 javac -target 1.6 -source 1.7 -bootclasspath /usr/java/jdk1.6.0_27/jre/lib/rt.jar Main.java

с Main.java с ничего, кроме System.out.println.

javac -version ==> javac 1.7.0_11

Я получаю сообщение об ошибке:

javac: source release 1.7 requires target release 1.7

У меня примерно такая же конфигурация на моей локальной машине Windows с теми же результатами.

Я понял, что кросс-компиляция - это компиляция некоторого исходного кода, который совместим с более высокой версией jdk, используя эту более высокую версию jdk, но передавая rt.jar целевой версии, которая предположительно ниже.

Если цель и источник совпадают, он работал.

target=1.7 and source=1.7 workd fine

target=1.6 and source=1.6 worked just fine

но мне нужна кросс-компиляция, так что же я делаю неправильно?

Я ценю всю помощь, которую я мог бы получить, и спасибо заранее.

Ответы

Ответ 1

У вас не может быть более новой версии исходной и нижней версии цели. Например, в Java 5 к языку добавлен ряд новых функций, таких как generics, autoboxing, и вы не можете ожидать, что JVM 1.4 поймет это. Итак, вы должны сообщить компилятору, что ваш исходный код является исходным кодом Java 1.4. Это объясняет ваши результаты.

Значение по умолчанию для -target зависит от значения -source:

  • Если -source не указан, значение -target равно 1.7
  • Если -source равно 1.2, значение -target равно 1.4
  • Если -source равно 1.3, значение -target равно 1.4
  • Если -source равно 1,5, значение -target равно 1.7
  • Если -source равно 1.6, значение -target равно 1.7
  • Для всех других значений -source значение -target является значением -source.

Подробнее см. http://docs.oracle.com/javase/7/docs/technotes/tools/windows/javac.html

Ответ 2

Это предел в javac. Обратите внимание, что вам удастся просто указать "-target" (и не-source) в более ранних версиях javac. Возможно, вы все еще сможете.

Возможно, вы захотите рассмотреть использование компилятора Java Eclipse (ecj), который доступен как автономный компилятор, как плагин maven и который также может использоваться задачей javac в сценариях ant.

Подробнее см. http://help.eclipse.org/indigo/topic/org.eclipse.jdt.doc.user/tasks/task-using_batch_compiler.htm.