2010-05-31 51 views
1

我想從我的OSGi的插件項目叫MavenCli。我已經將正確的庫添加到我的構建路徑和清單中。我認爲,我所做的一切都是正確的,到目前爲止,因爲當我主要方法添加到調用行家類,並在Eclipse中運行它,一切正常。當我從OSGi插件運行它時,出現以下錯誤(使用Maven開關-X -e):嵌入到Maven的OSGi應用程序

Apache Maven 3.0-beta-1(r935667; 2010-04-19 10:00:39- 0700) Java版本:1.6.0_16 Java主頁:C:\ Java \ jdk1.6.0_16 \ jre 默認語言環境:en_US,平臺編碼:Cp1252 操作系統名稱:「windows 7」版本:「6.1」 AMD64" 家庭:‘窗口’ [INFO]錯誤蹤跡被開啓。 [錯誤]執行Maven時出錯。

org.codehaus.plexus.component.repository.exception.ComponentLookupException:組件描述符不能在構件庫中找到 作用:org.apache.maven.Maven roleHint: classRealm:根本沒有org.codehaus指定 .plexus.DefaultComponentRegistry.getComponentManager(DefaultComponentRegistry.java:435) 在org.codehaus.plexus.DefaultComponentRegistry.getComponent(DefaultComponentRegistry.java:353) 在org.codehaus.plexus.DefaultComponentRegistry.lookup(DefaultComponentRegistry.java:178) 在org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:383) 在org.apache.maven.cli.MavenCli。容器(MavenCli.java:363) 在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:156) 在org.apache.maven.cli.MavenCli.doMain(MavenCli.java:131)

我使用Maven 3,β1,並使用下面的方法調用:

int x = MavenCli.doMain(params.toArray(new String[] {}), null); 

其中PARAMS中包含的東西像 「編譯」 等

任何想法?謝謝。

回答

0

我通過傳遞一個類加載器(this.getClass()。getClassLoader())到DefaultContainerConfiguration並將DefaultContainerConfiguration傳遞給DefaultPlexusContainer來得到這個工作。使用叢,我能夠加載實例化MavenExecutionRequestPopulator和Maven對象。

然後,當我嘗試執行任何目標,我創建了一個MavenExecutionRequest並設置POM文件,系統和用戶屬性。該系統屬性是從系統獲得的,並有我的-Dfoo = X性能等

在那之後,我用的方法我無恥地偷走了(不能從那裏記得了),但適應了一點......

public MavenExecutionResult execute(MavenExecutionRequest request) { 
     if (request == null) { 
      return null; 
     } 
     MavenExecutionResult result; 
     try { 
      populator.populateDefaults(request); 
      result = maven.execute(request); 
     } catch (MavenExecutionRequestPopulationException ex) { 
      ex.printStackTrace(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return result; 
    } 

讓我知道,如果需要任何進一步的細節。我會發布所有的代碼,但它分佈在許多文件中。祝你好運。