У меня есть проект с несколькими модулями в karaf (версия 3.0.3), и мне нужно было добавить одну зависимость к Xero API (шлюз для выставления счетов) — https://github.com/XeroAPI/Xero-Java
Я использую реализацию OSGI через felix apache. В модуле я добавил все зависимости от Xero, они находятся в pom ниже.
Pom.xml
<dependency>
<groupId>com.github.xeroapi</groupId>
<artifactId>xero-java</artifactId>
<version>${xero-java.version}</version>
</dependency>
<dependency>
<groupId>com.github.xeroapi</groupId>
<artifactId>xeroapi-schemas</artifactId>
<version>${xero-schemas.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb-api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>${jaxb-core.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb-impl.version}</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>${javax-activation.version}</version>
</dependency>
<dependency>
<groupId>org.threeten</groupId>
<artifactId>threetenbp</artifactId>
<version>${threetenbp.version}</version>
</dependency>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
<Import-Package>!com.google.api.client.http,*</Import-Package>
<Embed-Dependency>com.google.api.client.http</Embed-Dependency>
</instructions>
</configuration>
</plugin>
Вся реализация была развернута и скомпилирована, но при запуске karaf я получил следующую ошибку.
Бревенчатый караф
2019-07-19 15:44:19,812 | ОШИБКА | lixDispatchQueue | Прослушиватель развертывания функций | 22 — org.apache.karaf.deployer.features — 3.0.3 | Невозможно установить функции java.lang.Exception: не удалось запустить пакет mvn:com.xtpo.im/im-bll-impl/0.2-SNAPSHOT в функциях be-invoice-mgmt-0.2-SNAPSHOT: неразрешенное ограничение в пакете com.xtpo. im.im-bll-impl [368]: невозможно разрешить 368.0: отсутствует требование [368.0] osgi.wiring.package; (osgi.wiring.package=com.google.api.client.http) в org.apache.karaf.features.internal.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:504)[21:org.apache.karaf.features.core:3.0.3] на org.apache.karaf.features.internal.FeaturesServiceImpl.installFeatures(FeaturesServiceImpl.java:459)[21:org.apache.karaf.features.core:3.0.3] в Proxya6f8789a_dbdc_4181_b0eb_837248e8cb78.installFeatures (неизвестный источник) [:] в Proxycbafeabb_12c9_47e3_94d6_f999d20117fa.installFeatures (неизвестный источник) [:] в org.apache.karaf.deployer.features.FeatureDeploymentListener.bundleChanged(FeatureDeploymentListener.java:213)[22:org.apache.karaf.deployer.features:3.0.3] в org.apache.felix.framework.util.EventDispatcher.invokeBundleListenerCallback(EventDispatcher.java:868)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:789)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.util.EventDispatcher.run(EventDispatcher.java:1088)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.util.EventDispatcher.access$000(EventDispatcher.java:54)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.util.EventDispatcher$1.run(EventDispatcher.java:101)[org.apache.felix.framework-4.2.1.jar:] в java.lang.Thread.run(Thread.java:748)[:1.8.0_211] Причина: org.osgi.framework.BundleException: неразрешенное ограничение в пакете com.xtpo.im.im-bll-impl [368]: невозможно разрешить 368.0: отсутствует требование [368.0] osgi.wiring.package; (osgi.wiring.package=com.google.api.client.http) в org.apache.felix.framework.Felix.resolveBundleRevision(Felix.java:3974)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.Felix.startBundle(Felix.java:2037)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.BundleImpl.start(BundleImpl.java:955)[org.apache.felix.framework-4.2.1.jar:] в org.apache.felix.framework.BundleImpl.start(BundleImpl.java:942)[org.apache.felix.framework-4.2.1.jar:] в org.apache.karaf.features.internal.FeaturesServiceImpl.startBundle(FeaturesServiceImpl.java:501)[21:org.apache.karaf.features.core:3.0.3] ... еще 10
Проблема в com.google.api.client.http. Может ли кто-нибудь помочь мне решить эту проблему?
В функциях файла у меня есть следующие зависимости:
особенности.xml
<!--Xero dependencies-->
<bundle>wrap:mvn:com.github.xeroapi/xero-java/${xero-java.version}</bundle>
<bundle>wrap:mvn:com.github.xeroapi/xeroapi-schemas/${xero-schemas.version}</bundle>
<bundle>wrap:mvn:javax.xml.bind/jaxb-api/${jaxb-api.version}</bundle>
<bundle>wrap:mvn:com.sun.xml.bind/jaxb-impl/${jaxb-impl.version}</bundle>
<bundle>wrap:mvn:javax.activation/activation/${javax-activation.version}</bundle>
<bundle>wrap:mvn:org.threeten/threetenbp/${threetenbp.version}</bundle>
Спасибо всем




Феликс не может разрешить пакет com.google.api.client.http. Вы должны либо развернуть пакет, содержащий пакет, либо встроить его в свой собственный пакет. Пакет доступен из артефакта maven com.google.http-клиент:google-http-клиент.
Вы можете настроить maven-bundle-plugin на вставлять зависимости области компиляции и добавить зависимость к артефакту google http-client, указанному выше:
<dependency>
<groupId>com.google.http-client</groupId>
<artifactId>google-http-client</artifactId>
<version>1.30.2</version>
</dependency>
Может потребоваться некоторая настройка версии. Обратите внимание, что артефакт упакован в пакет OSGi, поэтому вы также можете попробовать загрузить его и развернуть на karaf вместе с собственным пакетом (вместо его встраивания).
В моем pom я использую плагин «maven-bundle-plugin» со следующей конфигурацией: <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true </extensions> <configuration> <instructions> <Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName> <Import-Package>!com.google.api.client.http,*</Import- Package> <Embed-Dependency>com.google.api.client.http</Embed-Dependency> </instructions> </configuration> </plugin>
Я думаю, что плагин maven-bundle-plugin соответствует только артефактуId, поэтому содержимое тега Embed-Dependency должно быть google-http-client-apache. Пожалуйста, попробуйте распаковать пакет, чтобы убедиться, что его классы действительно встроены. com.xtpo.im/im-bll-impl относится к набору, который вы создаете, верно?
Да! У меня такая же ошибка: (&(osgi.wiring.package=com.google.api.client.http)(version>=1.29.0)(!(version>=2.0.0)))
Извините, я ошибся насчет артефакта maven. Я обновил свой ответ правильным.
Хорошо, нет проблем. Теперь проблема в com.google.common.base. Unable to resolve 367.0: missing requirement [367.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.api.client.http)(version>=1.30.0)(!(version>=2.0.0))) [caused by: Unable to resolve 370.0: missing requirement [370.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.common.base)(version>=26.0.0)(!(version>=27.0.0)))]. Попробую гуаву (mvnrepository.com/artifact/com.google.guava/гуава). У вас есть другие решения?
Спасибо, @gjoranv. Я добавляю пакет (версия 1.29.0) и получаю следующую ошибку: java.lang.Exception: Не удалось запустить пакет mvn:com.xpto.im/im-bll-impl/0.2-SNAPSHOT в функциях invoice-mgmt-0.2-SNAPSHOT: неразрешенное ограничение в пакете com.xpto.im.im-bll-impl [368]: невозможно разрешить 368.0: отсутствует требование [368.0] osgi.wiring.package; (&(osgi.wiring.package=com.google.api.client.http)(версия>=1.29.0)(!(версия>=2.0.0)))