Нерешенное требование: пакет импорта: org.apache.commons.codec.language в bndtools / osgi - PullRequest
0 голосов
/ 08 ноября 2018

В настоящее время я работаю над проектом, в котором мне нужно перенести плагины в стиле PDE в плагины в стиле bnd. Я столкнулся с проблемой с внешними банками, поэтому я собирал пакеты для каждой банки и включал их в путь сборки. Для большинства банок это работало нормально, но у меня есть тот, который не ведет себя, как ожидалось.

org.apache.commons.codec.language. Этот пакет исходит из jar org.apache.commons.codec и разрешается нормально (по крайней мере, для bndtools), но когда я запускаю пакет, я получаю следующую ошибку:

! could not resolve the bundles: [test-0.0.0 org.osgi.framework.BundleException: Could not resolve module: test [1]
  Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"

]
! Failed to start bundle test-0.0.0, exception Could not resolve module: test [1]
  Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"

org.osgi.framework.BundleException: Could not resolve module: test [1]
  Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"

    at org.eclipse.osgi.container.Module.start(Module.java:447)
    at org.eclipse.osgi.internal.framework.EquinoxBundle.start(EquinoxBundle.java:431)
    at aQute.launcher.Launcher.startBundles(Launcher.java:519)
    at aQute.launcher.Launcher.activate(Launcher.java:425)
    at aQute.launcher.Launcher.run(Launcher.java:303)
    at aQute.launcher.Launcher.main(Launcher.java:149)

В этом репозитории Github я извлек один, который выдает ошибку в качестве ссылки: https://github.com/MaPhil/osgi-externals-test

Я довольно много гуглил по этой теме, но большинство ответов, похоже, касаются liferay или других конкретных библиотек. Я надеюсь, что любой из вас может дать мне подсказку.

1 Ответ

0 голосов
/ 08 ноября 2018

Хорошие новости для начала:

 Unresolved requirement: Import-Package: org.apache.commons.codec.language; version="[1.9.0,2.0.0)"

Это указывает на то, что ваш OSGi-пакет имеет импорт для org.apache.commons.codec.language, и тот факт, что он имеет диапазон версий (от 1,9 до 2,0, но не включая 2,0), является хорошим признаком того, что путь сборки не перепутан полностью.

Глядя на ваше примерное рабочее пространство, я вижу, что у вас есть проект, который вы используете, чтобы обернуть библиотеку кодеков Apache Commons. Я несколько озадачен тем, почему вы делаете это, так как кодек Apache Commons уже изначально доступен в виде OSGi-пакета. Если вы хотите зависеть от этого в своем рабочем пространстве, вы можете просто добавить его в один из существующих репозиториев. Например, в /cnf/central.maven вы можете добавить:

commons-codec:commons-codec:1.9

Который будет ссылаться на официальный релиз Maven Central. Затем вы можете ссылаться на этот комплект в пути сборки вашего bnd-файла, используя:

-buildpath: org.apache.commons.codec

Чтобы запустить ваше приложение, вы действительно должны создать файл bndrun, который вы можете использовать для объявления своих требований (в данном случае это требование вашего тестового проекта), а затем использовать операцию Resolve (либо кнопка в Bndtools, либо Задача Gradle). Это займет ваш список -runrequirements и создаст список -runbundles. В конечном итоге это будет выглядеть примерно так:

-runrequirements: osgi.identity;filter:='(osgi.identity=test)'

-runfw: org.eclipse.osgi;version='[3.13.100.v20180827-1536,3.13.100.v20180827-1536]'

-runbundles: test;version="[0.0.0,0.0.1)",\
     org.apache.commons.codec;version="[1.9.0,1.9.1)"

Затем вы можете запустить его непосредственно из этого файла bndrun. Он запустит фреймворк и развернет все пакеты запуска для вас. Если вы используете Bndtools, то он будет даже поддерживать синхронизированные развернутые пакеты с вашей рабочей областью Eclipse, так что вы всегда будете использовать самый последний развернутый код.

Более подробную информацию о том, как это делать , можно найти в документации Bndtools или связанных с ней деталях в OSGi enRoute

...