1
votes

Comment réparer org.osgi.framework.BundleException: impossible de mettre en cache le bundle?

Je travaille avec un code OSGi BundleActivator . Lorsque j'essaye de l'installer en utilisant Apache Karaf , j'obtiens toujours un Impossible d'installer le bundle mvn: com.baeldung / osgi-intro-sample-activator / 1.0-SNAPSHOT: org.osgi .framework.BundleException: Impossible de mettre en cache le bundle: erreur mvn: com.baeldung / osgi-intro-sample-activator / 1.0-SNAPSHOT .

Le tutoriel que j'ai essayé de suivre est ici: https://www.baeldung.com/osgi

La commande que j'utilise est bundle : installez mvn: com.baeldung / osgi-intro-sample-activator / 1.0-SNAPSHOT . J'ai essayé d'ajouter l'indicateur -s ou d'utiliser install au lieu de bundle: install , cela n'a pas aidé. J'ai essayé de l'exécuter à partir du répertoire racine et bundle de Karaf, cela n'a pas aidé.

Dans un dossier Karaf, j'ai essayé de définir org.ops4j.pax.url.mvn.localRepository = / Users / bogdansalyp / .m2 / repository , n'a pas aidé.

.m2 / repository vidé, n'a pas aidé. Je l'ai copié dans les dossiers bundle et Karaf, cela n'a pas aidé.

J'ai essayé mvn install et mvn clean install à partir de différents répertoires, n'a pas aidé .

Karaf est v4.2.6, maven est 3.1.1

Voici mon pom.xml:

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.");
    }

}

Voici le Java code que j'utilise:

<?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>

La structure du code peut être trouvée ici: https://github.com/eugenp/tutorials/tree/master/osgi/osgi-intro-sample-activator

Merci d'avance pour votre aide!


0 commentaires

4 Réponses :


0
votes

Si je ne me trompe pas, l'activateur ne doit pas se trouver dans le paquet privé, il doit être public.

Probablement, c'est le coupable:

<Private-Package>com.baeldung.osgi.sample.activator</Private-Package>

Retirez-le.


1 commentaires

malheureusement, cela n'a pas changé la situation



0
votes

Cela fait un moment que je n'ai pas utilisé Karaf mais j'ai peu de réflexions.

IIRC "org.osgi.framework.BundleException: Unable to cache bundle" signifie en fait que ce que Karaf obtient de l'URL fournie n'est pas un bundle installable. Donc

  • assurez-vous d'avoir exécuté mvn install (le package mvn ne suffit pas) pour installer le bundle dans votre dépôt Maven local avant d'essayer pour l'installer dans Karaf.
  • essayez de changer le formulaire de version 1.0-SHAPSHOT en 1.0.0-SNAPSHOT . Je ne sais pas si cela est lié, mais en général, essayez d'avoir sémantique versions
  • essayez d'utiliser bundle: watch au lieu de bundle: install ( voir la documentation ) qui mettra également à jour automatiquement le bundle lorsque vous le réinstallez dans le dépôt Maven local.

Je me souviens vaguement d'avoir eu des problèmes avec les bundles bundle: install et SNAPSHOT et / ou le référentiel Maven local mais malheureusement aucun détail. Une chose à vérifier est que vos dépôts et paramètres Maven sont corrects.


0 commentaires

0
votes

C'est peut-être un peu trop tard, mais l'erreur indique que karaf ne trouve pas le paquet. Vérifiez l'emplacement du fichier en .m2 ou si le MANIFEST généré est correct. Bonne chance!


0 commentaires

0
votes

Vous devez remplacer par bundle: installez mvn: com.baeldung / osgi-intro-sample-activator / 1.0-SNAPSHOT dans bundle: installez mvn: com.baeldung / osgi / 1.0 -SNAPSHOT car votre artifactId est osgi. Continuez à suivre ce lien


0 commentaires