我试图根据这个建议从我的java类中运行maven:
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
...
有什么建议吗?
答案 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个选择:
或者,这也可能是由于许可被拒绝,但案件的可能性较小。
答案 3 :(得分:1)
用户“ mvn.cmd”而不是mvn或mvn.bat。工作正常。