Ich arbeite an einer Hello World-Anwendung. Meine Anwendung wird mit Maven (3.5.0) erstellt, verwendet Apache Felix Annotationen und wird in Apache Karaf (4.1.1) ausgeführt. Meine Anwendung besteht aus einer einzigen Komponente namens App, die sofort gestartet werden sollte. Das Paket wird erfolgreich erstellt. Ich kann es erfolgreich in Karaf von meinem MVN-Repository installieren. Karaf zeigt das Bündel als "Aktiv" an. Das Problem ist, dass Konstruktor und die Methode activate meiner Komponente (App) niemals aufgerufen werden. Ich brauche ein zweites Paar Augen, um mir zu helfen herauszufinden, warum das passiert. Was fehlt mir in meiner pom.xml?OSGI-Paket aktiviert, aber Komponente nie erstellt, wenn DS und Apache Karaf
Der Vollständigkeit halber habe ich in meinem Projekt eine Activator-Klasse erstellt, die BundleActivator implementiert. Ich wies Maven dann an, meinen Bündel-Aktivator auf diese neue Klasse zu setzen. Jetzt, wenn ich mein Paket in Karaf installiere, kann ich die Log-Ausgabe meines Activators sehen. Die Startmethode wird getroffen. Also weiß ich, dass mein Bündel tatsächlich beginnt. Ich verstehe einfach nicht, warum meine App-Komponente niemals erstellt und aktiviert wird.
Hier sind die relevanten Dateien.
App.java
package myCompany;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@Component(immediate=true)
public class App
{
public App()
{
System.out.println("App constructed");
}
@Activate
public void activate()
{
System.out.println("App activated");
}
}
Activator.java
package myCompany;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class Activator implements BundleActivator{
public void start(BundleContext context) throws Exception {
System.out.println("Activator started");
}
public void stop(BundleContext context) throws Exception {
System.out.println("Activator stopped");
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>myCompany</groupId>
<artifactId>myProject</artifactId>
<packaging>bundle</packaging>
<version>1.0-SNAPSHOT</version>
<name>myProject</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>6.0.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.9.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.24.0</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<version>3.3.0</version>
<configuration>
<instructions>
<_dsannotations>*</_dsannotations>
<_metatypeannotations>*</_metatypeannotations>
<Bundle-Activator>myCompany.Activator</Bundle-Activator>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
Das hat funktioniert. Mit meinem Bundle bereits in Karaf geladen (aber nichts tun) Ich lief Feature: install scr, und voila, sehe ich endlich meine "App gebaut" und "App aktiviert" Nachrichten Pop-up. Vielen Dank. – jonathan