运行mvn release:通过Java代码

时间:2018-01-16 13:38:13

标签: java eclipse maven maven-release-plugin

我正在使用SVNKit API以编程方式检查svn项目后,通过Java代码执行一组maven命令,我面临一些奇怪的问题,如下所述 -

这是我调用maven命令的Java代码 -

public static void runCommand(String mavenCommand, File workingDirectory) 
throws IOException {
    ProcessBuilder processBuilder = new ProcessBuilder(getMavenCommand(), 
                                                       "release:prepare");
    processBuilder.directory(workingDirectory);
    Process process = processBuilder.start();
        try {
            process.waitFor();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
   }

protected static String getMavenCommand() {
    String cmd = (System.getProperty("os.name")
                               .startsWith("Windows")) ? "mvn.bat" : "mvn";
    String mavenHome = "C:/Program Files (x86)/apache-maven-3.2.1/bin/";
    return mavenHome + cmd;
}

release:prepare 命令要求用户针对三个问题点击“ENTER” - 标记的名称,发行版本和开发版本以及此代码通过Eclipse运行的时间(我重定向输出to stdout)我可以在控制台上看到该程序只是挂起并且没有继续进行,因为maven希望用户手动点击'ENTER'来询问问题,然后我通过Eclipse手动终止Java程序,之后子流程创建仍然运行并适当地生成我的标记,我尝试使用System.exit(0)终止Java程序,但这会终止所有子进程以及停止maven生命周期执行。

到目前为止我尝试过的事情 -

1)直接传递参数为标签名称,发布版本和下一个开发版本 - “release:prepare -Dtag = my-proj-1.10 -DreleaseVersion = 4.1.12 -DdevelopmentVersion = 4.1.13- SNAPSHOT“但该程序抱怨无效的maven生命周期

2)尝试使用来自mvn共享插件的API的mvn-invoker来按照这篇文章运行maven目标 - https://tfesenko.com/2015/10/09/running-maven-tasks-from-java-code/并在pom中添加了这种依赖 -

<!-- https://mvnrepository.com/artifact/org.apache.maven.shared/maven-
     shared-components -->
<dependency>
  <groupId>org.apache.maven.shared</groupId>
  <artifactId>maven-shared-components</artifactId>
  <version>16</version>
</dependency>

但是没有下载所需的依赖项并将其放在java构建路径上。

使用mvn-invoker来执行maven目标还是旧的Java Process方法更好?如果mvn:invoker那么我可以从哪里下载依赖jar maven-shared-components 以将它放在构建路径上?

上面的Java ProcessBuilder代码我做错了什么?

0 个答案:

没有答案