2010-05-31 76 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; 
    } 

让我知道,如果需要任何进一步的细节。我会发布所有的代码,但它分布在许多文件中。祝你好运。