如何以编程方式调用一个Maven任务 [英] How to programmatically call a Maven-task

查看:140
本文介绍了如何以编程方式调用一个Maven任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在另一个构建工具(使用Clojure的上下文中使用Maven,但这不重要),我想知道我如何调用一个插件 dependency:build-classpath 以编程方式(即通过Maven API,而不是通过 mvn -command)。

I'm using Maven in the context of another build-tool (leiningen for Clojure, but this should not matter), and I would like to know how I would call a plugin like dependency:build-classpath programmatically (i.e. via the Maven-API, not via the mvn-command).

推荐答案

查看org.apache.maven .plugin.testing.AbstractMojoTestCase从maven-plugin-testing-harness实现。

See how org.apache.maven.plugin.testing.AbstractMojoTestCase from maven-plugin-testing-harness is implemented. Here's a code snippet from some of my tests which may be helpful.

public abstract class JAXBGenerateTest extends AbstractMojoTestCase {

    static {
        System.setProperty("basedir", getBaseDir().getAbsolutePath());
    }

    protected MavenProjectBuilder mavenProjectBuilder;

    protected void setUp() throws Exception {
        super.setUp();

        mavenProjectBuilder = (MavenProjectBuilder) getContainer().lookup(
                MavenProjectBuilder.ROLE);
    }

    protected static File getBaseDir() {...}

    /**
     * Validate the generation of a java files from purchaseorder.xsd.
     * 
     * @throws MojoExecutionException
     */
    public void testExecute() throws Exception {

        final File pom = new File(getBaseDir(),
        "src/test/resources/test-pom.xml");

        final ArtifactRepository localRepository = new DefaultArtifactRepository( "local", 

                new File(getBaseDir(), "target/test-repository").toURI().toURL().toString()             , new DefaultRepositoryLayout());


        final MavenProject mavenProject = mavenProjectBuilder.build(pom, localRepository, null);


        final XJC2Mojo generator = (XJC2Mojo) lookupMojo("generate", pom);
        generator.setProject(mavenProject);
        generator.setLocalRepository(localRepository);
        generator.setSchemaDirectory(new File(getBaseDir(),"src/test/resources/"));
        generator.setSchemaIncludes(new String[] { "*.xsd" });
        generator.setBindingIncludes(new String[] { "*.xjb" });
        generator.setGenerateDirectory(new File(getBaseDir(), "target/test/generated-sources"));
        generator.setVerbose(true);
        generator.setGeneratePackage("unittest");
        generator.setRemoveOldOutput(false);

        generator.execute();
    }

}

这篇关于如何以编程方式调用一个Maven任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆