我使用的是来自OSGiAlliance、maven和ApacheFelixMaven scr插件的R6OSGi注释的组合。
在编写了一个简单的包之后,我没有看到包中有任何服务(使用KarafWebconsole或service:list)
这与通过BundleContext手动注册服务的低级API相同。
据我所知,maven scr插件在运行时为我生成清单和组件XML文件。
在下面的代码中,我希望服务SimpleMathI将在Karaf服务注册表中注册:我错过了什么吗?
package test;
//notice i don't use apache.felix, since:
//"Starting with the R6 release of the OSGi Declarative Services and Metatype specification, the official annotations support the same
//features as the Apache Felix SCR annotations in a more elegant manner and even provide additional functionality."
import org.osgi.framework.BundleContext;
import org.osgi.service.component.ComponentContext;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Deactivate;
@Component
public class TestClass implements SimpleMathI {
public TestClass() {
System.out.println("contructing TestClass");
}
@Activate
protected void activate(ComponentContext c, BundleContext b) {
System.out.println("activate testClass");
}
@Deactivate
protected void deactivate() {
System.out.println("de-activate testClass");
}
public void doSimpleAdd(int x, int y) {
System.out.println("Result(TestClass): " + (x + y));
}
public void doSimpleSubstract(int x, int y) {
System.out.println("Result(TestClass): " + (x - y));
}
}
这是我的pom文件:
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>DStestDS</artifactId>
<version>0.0.5</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
<version>1.20.0</version>
<executions>
<execution>
<id>generate-scr-scrdescriptor</id>
<goals>
<goal>scr</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.3.0</version>
</dependency>
<!-- official R6 osgi annotations -->
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.scr.annotations</artifactId>
<version>1.9.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
根据Christian的建议,我已经在pom中添加了maven bundle插件。xml文件并删除了maven scr插件,现在是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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>DStestDS</artifactId>
<version>0.0.10</version>
<dependencies>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.core</artifactId>
<version>4.3.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.service.component.annotations</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>org.osgi</groupId>
<artifactId>org.osgi.compendium</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
<configuration>
<obrRepository>NONE</obrRepository>
<instructions>
<_include>-bnd.bnd</_include>
</instructions>
</configuration>
</plugin>
</plugins>
</build>
</project>
这里是控制台的输出:没有列出任何服务
所以我不明白服务什么时候注册,为什么注册?为什么不调用@Activate方法?
顺便说一句,我没有得到任何编译错误,我也不做“导出”-
生成一个bundle文件后,我在里面看了看,发现META-INF\MANIFEST. MF看起来像:
Manifest-Version: 1.0
Built-By: username
Build-Jdk: 1.7.0_79
Created-By: Apache Maven 3.3.9
Archiver-Version: Plexus Archiver
好像少了什么东西,不是吗?
我没有看到任何服务列出通过karaf网络控制台:
karaf网络控制台
你是不是忘记安装scr功能了?
功能:安装scr
你的pom似乎也坏了。您需要使用maven bundle插件或bnd maven插件。如果使用OSGi规范DS注释,则不需要maven scr插件。
这是我在构建中使用的:https://github.com/cschneider/Karaf-Tutorial/blob/master/tasklist-ds/pom.xml#L107-L118
它创建捆绑包并处理DS规范注释。
您能说Apache Karaf包括以下内容吗?其中包括: Apache Felix(它是OSGi 4.2框架的实现) Apache Aries(它是Blueprint标准的实现)
这也没有空格啊,为什么会高出一些? font-size: 0; 这样可以解决,但空格都没有这个属性作用到哪里去了?
问题内容: 我在雄猫服务器(+ liferay)上收到此异常 我的课是这样的: 我在行上收到此异常, 当队列已满但大小为2 ^ 31时,可能会发生此错误,并且我确定没有那么多命令在等待。 一开始一切都稳定,但在我重新部署战争后,一切开始发生。此类不是战争的一部分,而是放在tomcat / lib中的jar中。 您是否知道为什么会发生这种情况以及如何解决? 问题答案: 从ThreadPoolExec
我试图在Karaf 3.0.0-RC1中使用H2数据库加载来获取Scala库,但我遇到了这个错误 有人知道我需要在POM和/或功能中添加什么吗。xml来让它工作吗? 谢谢,鲍勃
位于HTTP://localhost:8083/WinService的HTTP服务不可用。这可能是因为服务太忙,或者因为没有发现在指定地址侦听的终结点。请确保地址正确,稍后再尝试访问服务。 服务器堆栈跟踪:在System.ServiceModel.channels.HttpChannelUtilities.ProcessGetResponseWebException(WebException We
我正在从log4j-slf4j-impl 2.12.0升级到2.17.1。在我之前的代码中,除了 现在我已经升级到2.17.1,我得到了以下错误: org . Apache . Felix . resolver . reason . reason异常:无法解析org . Apache . logging . log4j . slf4j-impl/2 . 17 . 1:缺少需求[org . Apac