【问题标题】:Running maven goals from Java without a Maven executable installed on the machine在机器上没有安装 Maven 可执行文件的情况下从 Java 运行 maven 目标
【发布时间】:2015-07-07 20:55:15
【问题描述】:

我正在尝试构建一个项目以从 SCM 签出代码并使用 maven 构建它。有没有一种方法可以在不提供 maven home 的情况下从 java 实现运行 maven 目标(没有安装 maven)。对于 SVN,我使用 svnkit 来实现相同的目的。对于 Maven,我尝试使用以下 2 个选项。

http://maven.apache.org/ref/3.0-beta-3/maven-embedder/ Can anyone give a good example of using org.apache.maven.cli.MavenCli programattically?

对于上述两个选项,我需要安装一个 maven。有什么建议吗?

【问题讨论】:

    标签: java eclipse maven svn maven-embedder


    【解决方案1】:

    不,只需在项目中包含 jar 和以下内容即可编译代码:

    MavenCli cli = new MavenCli();
    int result = cli.doMain(new String[]{"compile"},
            "workspace/MiscMaven",
            System.out, System.out);
    System.out.println("result: " + result);
    

    根据评论,这是将依赖项添加到项目的方法。这不会在您的系统上安装 maven,只是在您的项目构建中包含 JAR:

    <dependency>
        <groupId>org.apache.maven</groupId>
        <artifactId>maven-embedder</artifactId>
        <version>3.3.3</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-connector-basic</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.aether</groupId>
        <artifactId>aether-transport-wagon</artifactId>
        <version>1.0.2.v20150114</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-provider-api</artifactId>
        <version>2.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-http-lightweight</artifactId>
        <version>2.9</version>
    </dependency> 
    

    【讨论】:

    • 你好 hd1。 MavenCli 需要安装 maven 才能运行 rite?。我尝试运行上面的代码并得到以下错误。线程中的异常原因:java.lang.ClassNotFoundException: org.codehaus.plexus.util.xml.pull.EntityReplacementMap at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged( Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
    • 我的 pom 文件中也有以下内容。'org.apache.mavenmaven-embedder3.1.1 org.eclipse.aetheraether-connector-wagon0.9.0.M2org.apache.maven.wagonwagon-http-lightweight2.5'
    猜你喜欢
    • 2017-12-08
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 2012-06-15
    • 2020-01-01
    相关资源
    最近更新 更多