在Windows中从Java代码运行Maven?

在Windows中从Java代码运行Maven?,java,windows,maven,cmd,Java,Windows,Maven,Cmd,基于以下建议,我尝试从java类运行maven: 但我得到: 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

基于以下建议,我尝试从java类运行maven:

但我得到:

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
...

有什么建议吗?

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

这里有两种选择:

  • 确保Maven bin目录位于PATH环境变量中
  • 使用mvn命令的绝对路径
  • 或者,这也可能是由于权限被拒绝,但这种情况不太可能发生。

    尝试:

    Runtime.getRuntime().exec("cmd \c mvn");
    
    编辑: 在回答第一个问题时

    对。请参阅:。基本上,您需要使用正在创建的子进程的输出


    我也喜欢这篇文章:

    您可以查看mvn.bat并回显实际执行的java命令,然后直接运行它

    在mvn.bat中:

    
    %MAVEN\u JAVA\u EXE%%MAVEN\u OPTS%%classpath%CLASSWORLDS\u JAR%“-Dclassworlds.conf=%M2\u HOME%\bin\M2.conf”“-Dmaven.HOME=%M2\u HOME%%CLASSWORLDS\u启动器%%MAVEN\u CMD\u LINE\u ARGS%
    

    在我的机器中,执行dependency:树是:

    
    “java-classpath\'C:\dev\tools\apache-maven-3.1.1\boot\plexus-classworlds-2.5.1.jar\'-dclasswords.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.launcher依赖关系:树”
    

    用户“mvn.cmd”而不是mvn或mvn.bat。它很好用

    我需要做:Runtime.getRuntime().exec(“cmd/cmvn”);但我在控制台中没有得到任何输出,是否有必要以某种方式将其输出?它会生成if:BufferedReader in=new BufferedReader(new InputStreamReader(p.getInputStream());字符串行=”;而((line=in.readLine())!=null){System.out.println(line);我在我的系统路径中添加了C:\User\username\apache-maven-3.0.4\bin,但仍然会出现相同的错误。请尝试重新启动ide,可能还有您的计算机。我也遵循了Guillame的说明,在我将maven添加到路径后也遇到了相同的问题。但是,一旦我重新启动计算机,在路径上发现了maven,Eclipse was能够运行maven命令。希望这有助于…更好地使用maven嵌入程序,请参阅
    Runtime.getRuntime().exec("cmd \c mvn");