РЕДАКТИРОВАТЬ: Только что увидел это сообщение год! RSS-поток Stackoverflow поместите это в начало моего списка!?!
+ 1 к Марселю и Тони, как правильно.
Пакет в состоянии RESOLVED является операцией экспорта / импорта пакетов ( ACTIVE означает, что любая активация служб была инициирована и завершена), и вам следует использовать функции Karaf.
В настоящее время мы вручную проверяем наш файл функций karaf (см. Документацию в формате PDF в загрузке дистрибутива), так как плагин v2.x создает отдельную функцию для каждой зависимости и является немного странным (я не пробовал trunk / v3, но он кажется фиксированной )
То, что вы пытаетесь, имеет две ошибки;
- Команда pax maven url handler распознает, что пакет уже установлен, и ничего не делает
- Даже если это произойдет, то 2-й комплект потерпит неудачу, так как наиболее вероятно , символическое имя будет идентично 1-му
(Худший) Вариант 1:
Если вы действительно отчаянно хотите обойти эту проблему, предполагая, что вы используете плагин maven-bundle-plugin, добавьте buildnumber-maven-plugin и это в конфигурацию пакета:
<Bundle-SymbolicName>${project.artifactId} ${buildNumber}</Bundle-SymbolicName>
Затем при установке пакетов используйте явную версию моментального снимка (SNAPSHOT в названии версии концептуально представляет собой просто ссылку на хранилище с последней версией с меткой времени):
install mvn:com.farpost.billing/background-service/2.2-20100812-1354
При использовании этой опции, как заявляет Марсель, вы могли бы импортировать другие пакеты пакетов, привязанные к пакету RESOLVED , при импорте услуг из пакета ACTIVE - поэтому несоответствия классов могут сломать вашу систему .
(Менее плохо) Вариант 2:
Чуть лучше (и без изменений в pom.xml):
- Обратите внимание на точную временную версию пакета
- Вызвать команду
refresh
- Для отката удалите комплект и установите ранее отмеченную версию
С помощью этой опции, как заявляет Тони, вы управляете всеми этими пакетами индивидуально, что является болезненным и опасным (что работает с чем? Где это записано?). Функции Karaf и плагин version-maven-plugin были бы намного лучшим решением
(Хорошо) Вариант 3:
- Разделите свой пакет на две части; комплект API и комплект реализации - таким образом, переключение комплекта реализации (сервисы и реальная логика) не повлияет на проводку пакета только на разрешение сервиса
- Используйте схему управления версиями OSGi, она имеет разумный синергизм с версиями Maven (см. семантическое управление версиями pdf и публикацию Питера Криенса о отрицательных квалификаторах ). Схема MAJOR.MINOR.MICO.qualifier, где микро числа, которые не добавляют никакой новой функциональности, кроме исправления ошибок
- SNAPSHOT следует использовать только для разработки, а не для производства, так как вы работаете с непроверенной, подверженной изменениям, движущейся целью (где вам действительно нужно использовать моментальные снимки, заблокируйте их до версии, с которой вы на самом деле работали используя версию с меткой времени (для сторонних зависимостей, которые вы должны использовать версию SNAPSHOT, здесь могут помочь версии-maven-plugin lock-snapshots цель)
- Используйте функции Karaf, это значительно упрощает управление большими наборами пакетов (разверните весь стек одной командой и обновите аналогичным образом)