【问题标题】:How to call a maven mojo from java/scala using the maven-embedder如何使用 maven-embedder 从 java/scala 调用 maven mojo
【发布时间】:2012-05-29 07:31:18
【问题描述】:

我想直接从 java/scala 调用 help:effective-pom mojo。

是否有一个如何设置 maven-runtime 和调用 mojo 的最小示例?

我假设在调用这个问题的答案中假设的东西之前需要一些上下文:

Reading POM's with its children

例如

http://svn.apache.org/viewvc/maven/plugins/tags/maven-help-plugin-2.1.1/src/main/java/org/apache/maven/plugins/help/EffectivePomMojo.java?view=markup

具体来说,有效的 pom mojo 会在 xml 中写入一些不需要的前缀和后缀,我想稍后直接在 xml 上工作。

【问题讨论】:

    标签: maven maven-plugin maven-embedder


    【解决方案1】:

    嗯。如果我检查内容,它没有垃圾。输出将生成单个文件。如果你喜欢阅读 pom,你应该看看aether lib,但问题是可以用它来阅读 pom,但你想执行一个 mojo,而不是需要构建一个非常复杂的 Maven 环境。看看here to get an impression how it could look like

    一段时间后我找到了this which looks more你喜欢用的东西。

    【讨论】:

    • 这涉及调用第二个 JVM,这将大大减慢速度。我不仅有一个要解析的文件,还有一大堆要解析的文件。此外,输出文件包含垃圾和可能的多个文件。问题是如何直接从 java 程序中调用它,而不启动新进程。
    • 相应地更新我的答案。
    【解决方案2】:

    使用Maven Embedder/MavenCli

    Java 代码

    MavenCli cli = new MavenCli();
    cli.doMain(new String[]{"help:effective-pom"}, "project_dir", System.out, System.out);
    

    项目配置

    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-embedder</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.aether</groupId>
            <artifactId>aether-connector-wagon</artifactId>
            <version>0.9.0.M2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.wagon</groupId>
            <artifactId>wagon-http-lightweight</artifactId>
            <version>2.5</version>
        </dependency>
    </dependencies>
    

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2016-01-28
      • 1970-01-01
      • 2013-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多