通过Java代码执行sonar-runner命令时出错

时间:2017-03-19 06:12:56

标签: java child-process

我需要编写一个可以执行以下几点的Java代码:

  1. 需要转到指定的目录,例如“G:\Java\Workspace”。
  2. 到达此目录后,需要执行“s onar-runner”命令。
  3. 请注意,我必须编写代码,以便通过命令提示符执行上述点。

    我收到下面提到的错误信息。还可以找到我使用过的代码片段。 任何人都可以看看这个,让我知道我在这里犯的错误吗?

    我得到以下例外:

    java.io.IOException: Cannot run program "sonar-runner" (in directory "G:\Java\Workspace"): CreateProcess error=2, The system cannot find the file specified
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at com.nitish.swing.code.ExecuteSonar.run(SonarAutomation.java:67)
    at java.util.TimerThread.mainLoop(Unknown Source)
    at java.util.TimerThread.run(Unknown Source)
    Caused by: java.io.IOException: CreateProcess error=2, The system cannot    find the file specified
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    ... 6 more    
    

    我的代码是:

    class ExecuteSonar extends TimerTask {
        final String proj_dir = "G:\\Java\\Workspace";
        final String cmd = "sonar-runner";
        Date now;
    
        @Override
        public void run() {
            now = new Date();
            Runtime rt = Runtime.getRuntime();
            System.out.println("The Time is:" + now);
            try {
                rt.exec(cmd, null, new File(proj_dir));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    

1 个答案:

答案 0 :(得分:0)

您提供了可执行文件的相对路径(sonar-runner),但找不到它:

  

The system cannot find the file specified

这是您的子进程继承的$PATH值的问题。我怀疑你会发现它是空的。 Other answers exist告诉你如何提供它。