Понизьте код Java с 1.5 до 1.4 (бонусные баллы: J2ME, Blackberry !!!) - PullRequest
7 голосов
/ 06 июня 2009

Я хочу портировать некоторые существующие библиотеки j2se (например, библиотеки Apache Compression) для использования при разработке Blackberry, но есть одна загвоздка (и не только одна).

Во-первых, большинство java-библиотек широко используют коллекции j2se и типы данных, которые обычно отсутствуют на платформах j2me - но это теоретически решаемо благодаря реализации j2se api с открытым исходным кодом, такой как Apache Harmony. Большая проблема в том, что Blackberry JDK, похоже, основан на java 1.4, поэтому любой код, использующий дженерики и другие функции 1.5, например Enums, не может быть легко скомпилирован на Blackberry.

Что поднимает интересный вопрос о том, существуют ли какие-либо существующие инструменты или проекты, которые могли бы выполнять автоматическое преобразование 1.5-> 1.4, поддерживая при этом j2me-bastardized bytecode:)

Один проект, который мне удалось найти, это Retroweaver , но я не совсем уверен, насколько активен этот проект.

Я уверен, что проблема автоматического преобразования 1.5-> 1.4 не уникальна - так есть у кого-нибудь опыт?

Ответы [ 5 ]

7 голосов
/ 06 июня 2009

Вы пробовали Ретротранслятор ? Я читал, что это делает лучше, чем Retroweaver.

2 голосов
/ 06 июня 2009

Вот что-то еще Я нашел здесь переполнение стека:

Компиляция с обычным javac и ориентация на более старую JVM даст вам надлежащий байт-код для генериков как минимум

Что имеет смысл попробовать.

2 голосов
/ 06 июня 2009

В прошлом я использовал ретро-ткач (J2SE, а не J2ME) - он работал очень хорошо. Стоимость его использования составляет пару дополнительных зависимостей времени выполнения.

Обновление 2013-01-28 : после проблем с RetroWeaver я переключился на RetroTranslator .

1 голос
/ 23 июня 2009

Итак, вот что я в итоге сделал: Declawer + некоторый пользовательский код для генерации классов перечисления.

Единственное отличие, которое есть в Declawer, заключается в том, что, хотя он очень прост и, откровенно говоря, немного взломан (он опирается на недокументированные возможности JavaC), его вывод представляет собой фактический код Java по сравнению с расширенным или преобразованным байт-кодом Java. , Это очень ценно для разработки на мобильных Java-приложениях, так как, честно говоря, модификация / инструментарий байт-кода совсем не так развита для платформ j2me, как для j2se, и просто нет никаких гарантий, что все будет работать "из коробки" они делают с j2se, где эти инструменты уже использовались многими разработчиками.

Функциональные возможности заявителя ограничены (нет любви к 1,5 перечислениям или автобоксам), поэтому мне пришлось добавить скрипт Python, чтобы автоматически генерировать классы, эквивалентные по функциональности 1,5 перечислениям из простых дескрипторов. Это поколение происходит во время сборки.

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

Но это обсуждение для другой темы.

0 голосов
/ 06 июня 2009

Вот еще два инструмента, которые я нашел (на которые ссылается страница Ретротранслятора):

...