Написание библиотеки Java для Java ME и Java SE с максимально возможным количеством общего кода
Я понимаю, что две версии Java существенно различаются, но библиотека, которую я ищу, использует стандартную сеть HTTP/TCP и сбор данных для выполнения своей задачи. Это две возможности, которые предоставляют обе платформы, хотя и для разных областей. Я предполагаю, что мог бы написать библиотеку, которая работает с наименьшим общим знаменателем, но было бы идеально иметь версию Java SE, которая использует преимущества обобщенных элементов и, как минимум, более обширные коллекции данных.
Я надеюсь, что смогу поддерживать кодовую базу, которая разделяет как можно больше кода между двумя версиями библиотеки, используя сценарий сборки для создания отдельной библиотеки для каждой из платформ Java. Очевидно, что API-интерфейсы будут немного отличаться, но если основной бизнес-логикой библиотеки можно поделиться, это сэкономит время и усилия.
Есть ли какие-либо сценарии сборки / предварительной обработки / другие методы, которые я могу использовать для достижения этой цели? Это больше хлопот, чем стоит?
2 ответа
Это больше хлопот, чем стоит?
Вероятно, да.
Предварительная обработка обычно не одобряется в мире Java. Препроцессоры существуют, но вы обнаружите, что они плохо поддерживаются в IDE, инструментах сборки и т. Д.
Для чего-то подобного я бы рекомендовал следующий подход:
Выясните, насколько в действительности должны быть различия между версиями кода SE и ME. С точки зрения долгосрочного технического обслуживания, вы, вероятно, не хотите никаких различий вообще.
Если есть вещи, с которыми вы просто не можете справиться, используя метод наименьшего общего знаменателя, то выделите их и спроектируйте / внедрите внутренний API, который скрывает различия платформы. Рукой.
Также подумайте о переносе полезных библиотек с SE на ME. Например, если вам действительно нужен полный стек коллекций, посмотрите, можете ли вы найти порт платформы SE Collections для ME. (Но обратной стороной этого, вероятно, будет раздувание кода на ME ... и это не сделает вас популярным.)
Вам нужно определить, что вы подразумеваете под JavaME. Платформа JavaME состоит из конфигураций и профилей, которые объединяются для формирования поддержки библиотеки. Например, JavaME Personal Profile 1.1 поверх конфигурации подключенного устройства (CDC) является урезанной JavaSE 4. У меня есть большое клиентское приложение, которое работает без изменений как на JavaSE 4, так и на JavaME PP 1.1, хотя мне пришлось отказаться очень немного API доступно в SE, но не в PP 1.1.
Большой вопрос в том, доступны ли нужные вам функции в обеих JVM.
В последнее время мы рассматриваем возможность запуска одного и того же клиента под Android, что является аналогичным соображением. При условии, что функции существуют в обоих, я планирую скрыть различия в моей собственной библиотеке API и реализовать тонкий слой совместимости для обеих JVM, которые реализуют этот API.
Если вы включите сторонние портированные библиотеки, что-то вроде ProGuard позволит вам исключить неиспользуемый код, чтобы минимизировать раздувание кода.