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!
4 Réponses :
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.
malheureusement, cela n'a pas changé la situation
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
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. 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 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.
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!
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