Этот базовый код успешно делает команду scopeA:test доступной в оболочке:
package com.A;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.ServiceProperty;
import org.apache.felix.service.command.Descriptor;
@Component(immediate = true)
@Instantiate
@Provides(specifications = Commands.class)
public final class Commands {
@ServiceProperty(name = "osgi.command.scope", value = "scopeA")
String scope;
@ServiceProperty(name = "osgi.command.function", value = "{}")
String[] function = new String[] {
"test"
};
@Descriptor("Example")
public void test() {
System.out.println("hello");
}
}
Однако, если я добавлю конструктор, который зависит от другого компонента OSGI, эта команда больше не будет доступна, и «помощь» не укажет ее. Тем не менее, пакет все еще может загружаться в активное состояние.
package com.A;
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Provides;
import org.apache.felix.ipojo.annotations.Requires;
import org.apache.felix.ipojo.annotations.ServiceProperty;
import org.apache.felix.service.command.Descriptor;
import com.B;
@Component(immediate = true)
@Instantiate
@Provides(specifications = Commands.class)
public final class Commands {
public Commands(@Requires B b) {
}
@ServiceProperty(name = "osgi.command.scope", value = "scopeA")
String scope;
@ServiceProperty(name = "osgi.command.function", value = "{}")
String[] function = new String[] {
"test"
};
@Descriptor("Example")
public void test() {
System.out.println("hello");
}
}
Содержимое B просто:
import org.apache.felix.ipojo.annotations.Component;
import org.apache.felix.ipojo.annotations.Instantiate;
import org.apache.felix.ipojo.annotations.Provides;
@Component(immediate = true)
@Instantiate
@Provides
final class B {
}
Любые идеи, почему команда больше не указана? Советы по поиску дополнительной информации о состоянии, чтобы я мог лучше отладить это?
inspect cap service [id]
, где [id] должен быть идентификатором бандла, содержащего компонент B. - person Neil Bartlett   schedule 08.02.2013