Понизьте версию кода Java с 1,5 до 1,4 (бонусные баллы:J2ME, Блэкберри!!!)

StackOverflow https://stackoverflow.com/questions/958366

Вопрос

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

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

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

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

Я уверен, что проблема автоматического преобразования 1,5->1,4 не уникальна - есть ли у кого-нибудь опыт решения этой проблемы?

Это было полезно?

Решение 4

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

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

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

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

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

Другие советы

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

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

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

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

Раньше я использовал Retroweaver (J2SE, а не J2ME) — он работал очень хорошо.Платой за его использование является пара дополнительных зависимостей во время выполнения.

Обновление 28 января 2013 г.:После возникновения проблем с RetroWeaver я переключился на РетроПереводчик.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top