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.