如何找到OSGi捆绑包的包依赖关系

如何找到OSGi捆绑包的包依赖关系,osgi,apache-felix,obr,Osgi,Apache Felix,Obr,我有2个OSGi包存储库。我想使用API检查一个bundle是否存在任何依赖性问题,前提是2OBR。我如何调用api来实现这一点? 似乎我可以使用下面的代码和Felix API来实现这一点。但是如何获取RepositoryAdmin对象呢 RepositoryAdmin repoAdmin = ... repoAdmin.addRepository(new File("/home/chandler/ws/reliability/testParent/test.eba/target/localob

我有2个OSGi包存储库。我想使用API检查一个bundle是否存在任何依赖性问题,前提是2OBR。我如何调用api来实现这一点? 似乎我可以使用下面的代码和Felix API来实现这一点。但是如何获取RepositoryAdmin对象呢

RepositoryAdmin repoAdmin = ...
repoAdmin.addRepository(new File("/home/chandler/ws/reliability/testParent/test.eba/target/localobr/repository.xml").toURI().toURL());
repoAdmin.addRepository(new File("/home/chandler/geronimo3/var/obr.xml").toURI().toURL());
List<Repository> repos = new ArrayList<Repository>();
for(Repository repo : repoAdmin.listRepositories()) {
repos.add(repo);
}       
repos.add(repoAdmin.getSystemRepository());
repos.add(getLocalRepository(repoAdmin));
Resolver resolver = repoAdmin.resolver(repos.toArray(new Repository[0]));
Resource resources[] = repoAdmin.discoverResources("(&(presentationname=*)(symbolicname=com.chandler.app.osgi.test))");
resolver.add(resources[0]);
boolean resolved = resolver.resolve();
RepositoryAdmin repoAdmin=。。。
repoAdmin.addRepository(新文件(“/home/chandler/ws/reliability/testParent/test.eba/target/localobr/repository.xml”).toURI().toul());
repoAdmin.addRepository(新文件(“/home/chandler/geronimo3/var/obr.xml”).toURI().toul());
列表repos=new ArrayList();
对于(Repository repo:repoAdmin.listRepositories()){
回购。增加(回购);
}       
add(repoAdmin.getSystemRepository());
add(getLocalRepository(repoAdmin));
Resolver-Resolver=repoAdmin.Resolver(repos.toArray(新存储库[0]);
资源资源[]=repoAdmin.discoverResources(&(presentationname=*)(symbolicname=com.chandler.app.osgi.test));
解析程序.add(资源[0]);
布尔已解析=解析器.resolve();

org.apache.felix.bundlerepository-x.y.z.jar应该在您的OSGi框架中安装和启动。您可以从BundleContext实例获取RepositoryAdmin服务。

是的,它安装在Eclipse中。我可以使用以下代码获取RepositoryAdmin ServiceTracker m_tracker=new ServiceTracker(ctx,RepositoryAdmin.class.getName(),null);m_tracker.open()//对于(Bundle b:ctx.getBundles()){//if(b.getSymbolicName()包含(//“org.apache.felix.bundlerepository”){//b.start();//}/}/}RepositoryAdmin repoAdmin=(RepositoryAdmin)m_tracker.getService();是的,它安装在Eclipse中。我可以拿到仓库管理员。但是当我尝试解析一个bundle时,返回值为false。在解析过程中,第一个未满足的需求是“bundle:(&(symbolicname=system.bundle))”。我应该如何配置system.bundle?