Вопрос:

Как исправить org.osgi.framework.BundleException: невозможно кэшировать пакет?

java osgi apache-karaf osgi-bundle

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:51

0 плюса

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 .

Автор: Milen Dyankov Размещён: 14.08.2019 01:00
Вопросы из категории :
32x32