public Channel start() throws Exception {
      System.out.println("forking a new process");
      // proc = Runtime.getRuntime().exec("java -Xdebug
      // -Xrunjdwp:transport=dt_socket,server=y,address=8000 hudson.remoting.Launcher");

      System.out.println(getClasspath());
      proc =
          Runtime.getRuntime()
              .exec(new String[] {"java", "-cp", getClasspath(), "hudson.remoting.Launcher"});

      copier = new Copier("copier", proc.getErrorStream(), System.out);
      copier.start();

      executor = Executors.newCachedThreadPool();
      OutputStream out = proc.getOutputStream();
      if (RECORD_OUTPUT) {
        File f = File.createTempFile("remoting", ".log");
        System.out.println("Recording to " + f);
        out = new TeeOutputStream(out, new FileOutputStream(f));
      }
      return new Channel("north", executor, proc.getInputStream(), out);
    }