Как исправить org.osgi.framework.BundleException: невозможно кэшировать пакет?
42 просмотра
2 ответа
3 Репутация автора
Я работаю с кодом OSGi BundleActivator . Когда я пытаюсь установить его с помощью Apache Karaf, я всегда получаю сообщение Unable to install bundle mvn:com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT: org.osgi.framework.BundleException: Unable to cache bundle: mvn:com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT
об ошибке.
Учебник, которому я пытался следовать, находится здесь: https://www.baeldung.com/osgi
Я использую команду bundle:install mvn:com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT
. Пытался добавить флаг -s или использовать install
вместо bundle:install
, не помогло. Пытался запустить его из корневого каталога и пакета Karaf, не помогло.
В папке Караф, которую я пытался установить org.ops4j.pax.url.mvn.localRepository=/Users/bogdansalyp/.m2/repository
, не помогло.
Опорожнил .m2/repository
, не помогло. Скопировал его в связки и папки Карафа, не помогло.
Пробовал mvn install
и mvn clean install
из разных каталогов, не помогло.
Karaf v4.2.6, maven 3.1.1
Вот мой pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>osgi-intro-sample-activator</artifactId>
<name>osgi-intro-sample-activator</name>
<!-- Please, note this is not the usual 'jar'. -->
<packaging>bundle</packaging>
<!-- com.baeldung/osgi-intro-sample-activator/1.0-SNAPSHOT -->
<parent>
<artifactId>osgi</artifactId>
<groupId>com.baeldung</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${project.artifactId}</Bundle-Name>
<Bundle-Version>${project.version}</Bundle-Version>
<!-- Qualified name of the class that exposes the activator iface. -->
<Bundle-Activator>com.baeldung.osgi.sample.activator.HelloWorld</Bundle-Activator>
<!-- One important thing to note: since you are not exporting the package "com.baeldung.osgi.sample.activator", you should at least add it to the Private-Package
instruction. Otherwise, the classes inside the package will not be copied to your bundle, as the default value of this instruction is empty. -->
<Private-Package>com.baeldung.osgi.sample.activator</Private-Package>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
Вот код Java, который я использую:
package com.baeldung.osgi.sample.activator;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class HelloWorld implements BundleActivator {
public void start(BundleContext ctx) {
System.out.println("Hello World.");
}
public void stop(BundleContext bundleContext) {
System.out.println("Goodbye World.");
}
}
Структуру кода можно найти здесь: https://github.com/eugenp/tutorials/tree/master/osgi/osgi-intro-sample-activator
Заранее спасибо за помощь!
Автор: Bogdan Salyp Источник Размещён: 13.08.2019 02:57Ответы (2)
0 плюса
2293 Репутация автора
Если я не ошибаюсь, активатор не должен находиться в приватном пакете, он должен быть публичным.
Вероятно, это виновник
<Private-Package>com.baeldung.osgi.sample.activator</Private-Package>
Убери это.
Автор: Marcos Zolnowski Размещён: 14.08.2019 01:510 плюса
1467 Репутация автора
Прошло много времени с тех пор, как я использовал Караф, но у меня мало мыслей.
IIRC «org.osgi.framework.BundleException: Невозможно кэшировать пакет» фактически означает, что то, что получает Karaf с предоставленного URL-адреса, не является устанавливаемым пакетом. Так
- убедитесь, что вы запустили
mvn install
(mvn package
этого недостаточно) для установки пакета в локальном репозитории Maven, прежде чем пытаться установить его в Karaf. - попробуйте изменить форму версии
1.0-SHAPSHOT
на1.0.0-SNAPSHOT
. Не уверен, что это связано, но в целом стараюсь иметь семантические версии - попробуйте использовать
bundle:watch
вместоbundle:install
( см. документы ), который также автоматически обновит пакет при переустановке в локальное хранилище Maven.
Я смутно помню, что у меня были некоторые проблемы с bundle:install
пакетами SNAPSHOT и / или локальным репозиторием Maven, но, к сожалению, никаких подробностей. Нужно проверить, правильны ли ваши репозитории и настройки Maven .
Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- java Преобразование списка <Integer> в список <String>
- osgi Как настроить Log4J при развертывании приложения OSGi с помощью моста Servle Equinox в Tomcat?
- osgi Чтение Манифеста моего кувшина
- osgi ОШИБКА: java.lang.ClassCastException: класс org.apache.cxf.bus.spring.SpringBusFactory
- osgi Как исключить код зависимости GWT из пакета OSGI, сгенерированного MAven + BND?
- osgi Диапазон допустимых версий OSGI
- apache-karaf the karaf log doesn't display the date
- apache-karaf Blueprint CXF serviceFactories: нужен экземпляр для каждого запроса
- apache-karaf Управление зависимостями в пакете OSGI ServiceMix
- apache-karaf Запрос на мыло Часть сообщения не была распознана
- apache-karaf Могу ли я поместить сторонние банки в karaf (любую конкретную папку) для разрешения транзитивных зависимостей?
- osgi-bundle как включить стороннюю библиотеку в maven-bundle-plugin (v2.3.7)
- osgi-bundle Tycho: Bundle X - отсутствует ограничение: Bundle-RequiredExecutionEnvironment: JavaSE-1.7
- osgi-bundle динамически загружать класс в пакет osgi
- osgi-bundle Как начать немедленный = ложный компонент?