在Windows中从Java代码运行Maven?

时间:2012-03-12 20:21:24

标签: java windows maven cmd

我试图根据这个建议从我的java类中运行maven:

How to run maven from java?

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

但我明白了:

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

mvn在我的路上,我可以从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
...

有什么建议吗?

4 个答案:

答案 0 :(得分:10)

尝试:

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

修改 回答第一个问题...

是。见:Process#getInputStream。基本上,您需要使用正在创建的子流程的输出。

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

答案 1 :(得分:2)

您可以查看mvn.bat和echo实际执行的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 :(得分:1)

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

这里有2个选择:

  1. 确保Maven bin目录位于PATH环境变量
  2. 使用mvn命令的绝对路径。
  3. 或者,这也可能是由于许可被拒绝,但案件的可能性较小。

答案 3 :(得分:1)

用户“ mvn.cmd”而不是mvn或mvn.bat。工作正常。