Как обновить пакет из артефакта Maven с помощью Apache Felix
В настоящее время у меня есть ситуация, когда я разрабатываю проект, затем запускаю mvn install
и он помещается в мой локальный репозиторий Maven в виде простого файла JAR
Затем у меня есть созданная другими ребятами "среда", которая включает в себя множество пакетов и прочее, и в конечном итоге запускается через mvn pax:run
и это займет около 5 минут, чтобы бежать
Я хотел бы иметь возможность просто бежать felix:update <bundle-name>
но я не могу заполнить пробел между артефактом JAR Maven в локальном репозитории Maven и пакетом, готовым для предоставления, который я мог бы поместить куда-нибудь, чтобы просто запустить felix:update
или что угодно, может быть uninstall/install
Когда я пытаюсь бежать mvn pax:create-bundle
с моим проектом, он бросает Containing project does not have packaging type 'pom'
исключение
Любая помощь высоко ценится
ОБНОВЛЕНИЕ: я заметил, что проблемы с переустановленным пакетом начинаются в его активаторе, с ClassNotFoundException (хотя упомянутый класс есть и всегда присутствует в пакете, поэтому он должен иметь проблему с classpath, установкой ClassLoader или чем-то еще)
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation BundleWiringImpl.java:1574 at org.apache.felix.framework.BundleWiringImpl.access$400 BundleWiringImpl.java:79 at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass BundleWiringImpl.java:2018 at java.lang.ClassLoader.loadClass ClassLoader.java:357 at some.external.adapters.package.guice.SomeModule.configure SomeModule.java:46 at com.google.inject.AbstractModule.configure AbstractModule.java:59
2 ответа
Если у вас есть путь к файлу, который является недавно созданным пакетом, вы можете обновить его из оболочки Gogo следующим образом:
felix:update <bundleid> file:/path/to/file
refresh
куда <bundleid>
это числовой идентификатор пакета, который вы хотите обновить. refresh
команда необходима, если какие-либо пакеты зависят от импортируемых пакетов или импортируются из них; эта команда заставит Framework попытаться повторно разрешить их, используя новую зависимость.
Я рад принять ответ @neil-bartlett, хотя мне нужно добавить еще немного контекста:
1) одна из самых больших проблем, которые у меня были изначально, заключается в том, что JAR-файл в локальном репозитории Maven НЕ ЖЕ, как комплект OSGi. Для того, чтобы создать пакет, мне нужно было запустить mvn bundle:bundle
ПОСЛЕ mvn install
, И пакет был создан в target/
папка.
2) после этого в оболочке GoGo я действительно мог запустить felix:update <bundle-id> file:C:/Users/blablabla/bundle-SNAPSHOT-2.0.jar
и по некоторым причинам в наши дни это просто работает. Исключения, упомянутые в обновлениях к исходному сообщению, действительно имеют место, но они не препятствуют правильной установке обновленного пакета.