我试图使用bndtools来创建我的OSGI程序。这是我之前的代码,它可以与felix控制台一起使用。
package com.buaa.ate.service.data.command;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.apache.felix.service.command.CommandProcessor;
import com.buaa.ate.service.api.data.Publisher;
@Component(
service=PublishCommand.class,
property={
CommandProcessor.COMMAND_SCOPE + ":String=example",
CommandProcessor.COMMAND_FUNCTION + ":String=publish",
}
)
public class PublishCommand {
private Publisher publishSvc;
@Reference
public void setPublisher(Publisher publishSvc) {
this.publishSvc = publishSvc;
}
public void publish(String content) {
publishSvc.start();
long result = publishSvc.publish(content);
System.out.println(result);
publishSvc.stop();
}
}
现在,我想更改这样的注释:
package com.buaa.ate.service.data.command;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import org.apache.felix.service.command.CommandProcessor;
import com.buaa.ate.service.api.data.Publisher;
@Component(
service=PublishCommand.class,
properties="com/buaa/ate/service/data/command/config.properties"
)
public class PublishCommand {
private Publisher publishSvc;
@Reference
public void setPublisher(Publisher publishSvc) {
this.publishSvc = publishSvc;
}
public void publish(String content) {
publishSvc.start();
long result = publishSvc.publish(content);
System.out.println(result);
publishSvc.stop();
}
}
这是我的属性文件: config.properties
它的内容是这样的:
osgi.command.scope\:String:example
osgi.command.function\:String:publish
当我运行程序时,输入命令'发布内容',然后问题发生:
'gogo: CommandNotFoundException: Command not found: publish'
那么,我该怎么办才能解决这个问题呢?
答案 0 :(得分:2)
好吧,我只是意识到修复这个问题很容易。这是osgi javadoc的一部分:
属性
public abstract java.lang.String [] property
此组件的属性。 每个属性字符串都指定为“key = value”。属性值的类型可以在键中指定为键:type = value。该类型必须是组件描述的属性元素的type属性支持的属性类型之一。
要指定具有多个值的属性,请使用多个键值对。例如,“foo = bar”,“foo = baz”。
参见: “组件描述的属性元素。”
默认:{}
所以我将'type'属性添加到config.properties,然后代码可以正常工作。这是当前的属性文件: current properties file
它的内容是这样的:
Iterator<E> it = keys.iterator();
该计划现在可以很好地运作。