Я пишу клиент (Eclipse RCP), который должен иметь возможность использовать несколько версий библиотеки (которая инкапсулирует интерфейс бэкэнд). В каждой версии библиотеки добавляются новые классы/методы, используемые клиентом. В случае использования более старой версии lib клиент будет обращаться к новым классам/методам, которых нет в байт-коде lib, в результате чего NoClassDefFoundError.Приложение Java, обращающееся к нескольким версиям библиотеки
Так что я думаю о том, как это сделать наилучшим образом. Самый простой способ сделать его отказоустойчивым - обернуть все вызовы такого кода в блоки try/catch, я думаю. Я подумывал написать пользовательскую аннотацию для маркировки нового кода в источнике библиотеки, а затем выпустить предупреждение компилятора, когда к этому отмеченному коду обращается код, который не защищен try/catch (это можно сделать с помощью специальной аннотации? прежде всего). Или кто-то может подумать о другом подходе, который более изящный?
Это не совсем то, что я прошу. Проблема не в том, как получить версии lib, но как обрабатывать вещи, о которых я говорю в коде. – dschuld
Хороший способ - это интерфейсы. Вы можете предоставить интерфейсы, которые будут использовать клиентов. Новая реализация будет предоставлена пользователю без проблем. –