我是Eclipse接口命令提供程序的新代码。我在网站上看到了一个例子
public void _say(CommandInterpreter ci) {
ci.print("You said:" + ci.nextArgument());
}
@Override
public String getHelp() {
return "\tsay - repeats what you say\n";
}
它用于将命令作为String并再次打印。
现在这是执行命令的另一个
String command = intcp.nextArgument();
if (command != null) {
intcp.execute(command);
}
为什么我们使用这种execute(command)
方法?以及如何使用它?它有什么例子吗?
答案 0 :(得分:5)
OSGI控制台主要用于调试OSGI应用程序。实现计算器并不是一种非常方便的方法。普通的控制台应用程序会更好。无论如何,这是熟悉API的好方法。
首先,创建一个实现CommandProvider的类:
public class Calculator implements CommandProvider {
// add prints sum of its two arguments
public void _add(CommandInterpreter ci) {
int a = Integer.parseInt(ci.nextArgument());
int b = Integer.parseInt(ci.nextArgument());
ci.println(a+b);
}
// quit just calls "exit"
public void _quit(CommandInterpreter ci) {
ci.execute("exit");
}
@Override
public String getHelp() {
return "";
}
}
您需要在捆绑包的激活器中注册它:
public class Activator implements BundleActivator {
public void start(BundleContext bundleContext) throws Exception {
bundleContext.registerService(CommandProvider.class.getName(),
new Calculator(), null);
}
@Override
public void stop(BundleContext context) throws Exception {
}
}
要实际使用这些命令,您需要使用-console
命令行参数启动RCP应用程序。如果您的软件包是懒惰加载的,则需要在命令可用之前启动它:
osgi> start com.example.mybundle
osgi> add 2 2
4
osgi> quit
Really want to stop Equinox? (y/n; default=y) y
答案 1 :(得分:0)
我想提供另一种(更好的恕我直言)方式来编写自己的命令。实现CommandProvider
接口不是一个很好的方法,因为它只适用于Equinox。最好按照RFC 147
中的描述去做(尽管我知道它尚未发布但无关紧要,已经描述了实现命令提供程序的方法)。
您只需要提供两个属性的OSGi服务:
在服务类中,您可以编写通过命令调用的公共方法。这是一个简单的例子:
public final class MyCommandProvider {
public void doAction(String id) {
System.out.println("id=" + id);
}
public void doAnotherAction() {
System.out.println("Another action");
}
}
现在您可以注册此服务(以您想要的任何方式,例如使用Declarative Services
),然后您将在OSGi控制台中编写两个命令:doAction('some string')
和doAnotherAction
。
您可以阅读更多here。