Подтвердить что ты не робот

Установка новой версии Groovy в моей OSGi-среде делает мой пакет импортированным, хотя он не должен

У меня есть небольшой пакет, который использует Groovy для интерпретации скриптов.

Инструкция Import-Package выглядит так:

Import-Package: groovy.util;version="[1.8,2)"

В приведенном выше диапазоне версий указано, что версия импорта должна быть между 1.8 (включительно) и 2.0 (эксклюзивно).

Когда я запускаю этот пакет в среде OSGi с установленным только Groovy 1.8.6, он работает как ожидалось... когда я набираю inspect package requirement 4, он печатает:

-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]
groovy.util; version=1.8.6 -> groovy-all [5]

Это точно так, как я ожидал, и когда я прошу CodeRunner интерпретировать этот Groovy фрагмент:

GroovySystem.version

Он правильно возвращает 1.8.6.

Теперь, когда я запускаю среду OSGi с установленными Groovy 1.8.6 и 2.3.3, когда я проверяю пакеты для своего пакета, я получаю это вместо:

-> com.athaydes.gradle.osgi.groovy-1-8-6-runner [4] imports packages:
------------------------------------------------------------------
ipojo.example.code; version=0.0.0 -> com.athaydes.gradle.osgi.code-runner-api [1]

Импорт groovy.util ушел (хотя, конечно, MANIFEST его, конечно)! И теперь, когда я запускаю GroovySystem.version, я получаю 2.3.3, а не 1.8.6, как и должно быть!

Это сумасшедший материал, похоже, только тот факт, что присутствует более новая версия Groovy, нарушает обещание OSGi, что я должен использовать любую версию зависимости, которую я хочу.

Я тестировал это в Felix и Equinox с точно таким же результатом.

Я также использовал точную версию в манифесте вместо диапазона, но это ничего не меняло.

Может ли кто-нибудь увидеть, что именно происходит здесь?

PS. если вы мне не верите, попробуйте сами, вот проект на GitHub: https://github.com/renatoathaydes/osgi-run/tree/next/osgi-run-test/ipojo-dosgi

4b9b3361

Ответ 1

Не используйте диапазон версий. Явно задайте версию groovy.util Это может показаться не очень полезным, но я считаю, что это сработает. Мы получаем очень похожую проблему, когда пытаемся генерировать файлы Karaf features.xml на зависимостях с диапазонами версий (мы работали над этим, написав собственный плагин, который удалил верхний элемент с версией из файла готовых функций:()