如何以编程方式为Maven创建Plexus容器?

时间:2013-02-08 11:30:03

标签: maven

我已经编写了Maven插件的一部分,但它不能再作为插件运行。它可以访问SCM或任何pom.xml,只需要一个工件库和一些Maven坐标。它意味着采用Maven坐标并打印出它们的依赖关系(对它们执行一些报告)。要做到这一点,需要以编程方式访问(例如):

  • MavenProjectBuilder
  • DependencyGraphBuilder

你注入mojo的常用内容,但它不是mojo而且不能这样运行(因为我没有pom.xml)。

我的代码没有帮助我,例如AbstractMojoTestCase需要一个pom.xml,我没有。

我想要一些类似的代码。

    DefaultPlexusContainer container = new DefaultPlexusContainer();
    Context context = container.getContext();
    context.put("plexus", new DefaultPlexusContainer());
    container.initialize();
    container.start();

    MavenProjectBuilder mavenProjectBuilder = (MavenProjectBuilder) container.lookup(MavenProjectBuilder.ROLE);
    DependencyGraphBuilder dependencyGraphBuilder = (DependencyGraphBuilder) container.lookup(DependencyGraphBuilder.class.getName());
    MavenProject project = mavenProjectBuilder.buildFromRepository(artifact, remoteArtifactRepositories, localRepository);
    // do stuff with dependencies

但缺少一些东西。救命啊!

1 个答案:

答案 0 :(得分:2)

看看它是如何完成的https://github.com/jenkinsci/lib-jenkins-maven-embedder(我们在jenkins中用于类似目的)