Компиляция Java-кода, написанного для 1.5, для работы с 1.4 JRE?

У меня есть проект, который использует дженерики и несколько кусочков Java 1.5 / 6. Можно ли скомпилировать этот код для работы в системе под управлением 1.4 JRE?

Я использую скрипт сборки ANT и задачу javac для компиляции библиотеки. Это прекрасно работает, в то время как целевой атрибут равен 1,5.

Если я изменяю цель на 1.4, я получаю следующую ошибку:

generics are not supported in -source 1.4 
(use -source 5 or higher to enable generics)

Поэтому я добавляю атрибут источника и пробую значение 5 и 1,5. Новая ошибка:

javac: source release 5 requires target release 1.5

Я собираюсь пройти через весь мой код и изменить материал 1.5, чтобы это работало?

10.06.2009 10:46:58
Примечание 1.4 закончил свой срок службы, а 1.5 - это большая часть. Однако поддержка «Java для бизнеса» доступна по цене.
Tom Hawtin - tackline 10.06.2009 11:55:43
4 ОТВЕТА
РЕШЕНИЕ

Я не использовал ни одно из этих решений, но есть

  1. Retroweaver
  2. указание неподдерживаемого -target jsr14 может работать
  3. Retrotranslator
  4. Declawer
  5. JBossRetro

Вы также можете найти javac -XD-printflatполезными (хотя будьте осторожны, чтобы не перезаписать ваш исходный источник).

7
10.06.2009 11:58:54
Второй, кажется, работает. Теперь, чтобы проверить, что библиотека на самом деле работает на JRE 1.4 ...
Adrian Hope-Bailie 10.06.2009 11:14:31
jsr14 не собирается сокращать это. Нет поддержки enum. С другой стороны, ретро-ткач великолепен.
Adrian Hope-Bailie 10.06.2009 11:44:32
Спасибо, я знал только о Retroweaver до сих пор. Большинство из этих инструментов прямо заявляют, что они могут нацеливаться на 1.4, но, насколько я вижу, только Retroweaver позволяет вам нацеливаться и на 1.2, что может понадобиться для разработки J2ME.
Lena Schimmel 24.07.2009 10:53:00

Обобщения реализуются с помощью стирания типов, поэтому они должны работать до того, как обобщения будут введены. Однако вы не сможете скомпилировать код с более старой версией компилятора (я не знаю, почему вы захотите это сделать)

0
10.06.2009 10:54:01
Использование компилятора JDK 1.6. Просто кажется странным, что вы можете указать целевую версию и исходную версию, но выдает ошибку, если они не совпадают.
Adrian Hope-Bailie 10.06.2009 11:12:05
Вы можете указать более раннюю версию источника, чем целевую версию. Таким образом, ваш источник 1.4 с перечислениями, называемыми enum, все еще может компилироваться и работать с неизмененными JDK в процессе эксплуатации.
Tom Hawtin - tackline 10.06.2009 11:54:43

У меня есть проект, который использует дженерики и несколько кусочков Java 1.5 / 6. Можно ли скомпилировать этот код для работы в системе под управлением 1.4 JRE?

Нет.

Я собираюсь пройти через весь мой код и изменить материал 1.5, чтобы это работало?

Да. Но есть способ автоматизировать это, используя инструмент Retroweaver . Там нет гарантии, что он поймает все, хотя.

6
10.06.2009 10:55:14

У меня был хороший опыт работы с Retrotranslator (ретро-ткач не работал должным образом с тем, что мне было нужно, точно не помню, что именно).

Это очень хорошо работало для моей цели (создание версий Logback для JDK1.4).

http://retrotranslator.sourceforge.net/

1
10.06.2009 11:47:15