从Windows中的Java代码运行Maven?

我想基于这个build议从我的java类运行maven

如何从java运行maven?

Runtime.getRuntime().exec("mvn"); 

但是我得到:

 java.io.IOException: Cannot run program "mvn": CreateProcess error=2, The system cannot find the file specified 

mvn是我的path,我可以从cmd运行它:

 C:\Users\m>mvn -v Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100) Maven home: C:\apache-maven-3.0.3\bin\.. Java version: 1.6.0_20, vendor: Sun Microsystems Inc. Java home: C:\Program Files\Java\jdk1.6.0_20\jre ... 

有什么build议么?

尝试:

 Runtime.getRuntime().exec("cmd \c mvn"); 

编辑:为了响应第一个问题…

是。 请参阅: Process#getInputStream 。 基本上你需要消耗正在创建的子进程的输出。

我也喜欢这篇文章: http : //www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html

您可以查看mvn.bat并回显实际执行哪个java命令并直接运行它。

在mvn.bat中:

%MAVEN_JAVA_EXE% %MAVEN_OPTS% -classpath %CLASSWORLDS_JAR% "-Dclassworlds.conf=%M2_HOME%\bin\m2.conf" "-Dmaven.home=%M2_HOME%" %CLASSWORLDS_LAUNCHER% %MAVEN_CMD_LINE_ARGS%

在我的机器执行依赖关系:树是:

"java -classpath \"C:\dev\tools\apache-maven-3.1.1\boot\plexus-classworlds-2.5.1.jar\" -Dclassworlds.conf=C:\dev\tools\apache-maven-3.1.1\bin\m2.conf -Dmaven.home=\"C:\dev\tools\apache-maven-3.1.1\" org.codehaus.plexus.classworlds.launcher.Launcher dependency:tree"

错误2意味着JRE环境无法找到可执行文件。 这意味着PATH环境变量不包含Maven二进制目录。

这里有两个选择:

  1. 确保Maven bin目录在PATH环境变量中
  2. 使用mvn命令的绝对路径。

另外,这也可能是由于拒绝了权限,但情况不太可能。