2013-04-02 43 views
0

的包依賴我有2個OSGi包庫。我想使用API​​來檢查bundle是否有任何依賴性問題,提供2 obr。我怎樣才能調用API來做到這一點? 看來我可以使用下面的代碼與Felix API來做到這一點。但是我怎樣才能得到RepositoryAdmin對象?如何找到一個OSGi包

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(); 

回答

0

org.apache.felix.bundlerepository-x.y.z.jar應安裝在你的OSGi框架開始。您可以從BundleContext實例獲取RepositoryAdmin服務。

+0

是的,它安裝在Eclipse中。我可以通過以下代碼獲取RepositoryAdmin ServiceTracker m_tracker = new ServiceTracker(ctx, \t \t \t \t RepositoryAdmin.class.getName(),null); \t \t m_tracker.open(); // \t \t爲(捆B:ctx.getBundles()){// \t \t \t如果(b.getSymbolicName()包含( // \t \t \t \t \t 「org.apache.felix.bundlerepository」 )){// \t \t \t \t b.start(); // \t \t \t} // \t \t} \t \t RepositoryAdmin repoAdmin =(RepositoryAdmin)m_tracker.getService(); –

+0

是的,它安裝在Eclipse中。我可以得到RepositoryAdmin。但是,當我嘗試解析一個包時,返回值是錯誤的。和決心期間,第一不滿足要求是 「捆綁:(&(symbolicname = system.bundle))」。我應該如何配置system.bundle? –