code: public synchronized void exec( final String[] vmOptions,
                                     final String[] classpath,
                                     final String mainClass,
                                     final String[] programOptions,
                                     final String javaHome,
                                     final File workingDirectory,
                                     final String[] envOptions )
          throws ExecutionException
      {
          if( m_frameworkProcess != null )
          {
              throw new ExecutionException( "Platform already started" );
          }
  
          String cp = String.join(File.pathSeparator, classpath);
  
          final CommandLineBuilder commandLine = new CommandLineBuilder()
              .append( getJavaExecutable( javaHome ) )
              .append( vmOptions )
              .append( "-cp" )
              .append( cp )
              .append( mainClass )
              .append( programOptions );
  
          LOG.debug( "Start command line [" + Arrays.toString( commandLine.toArray() ) + "]" );
  
          try
          {
              LOG.debug( "Starting platform process." );
              ProcessBuilder pb = new ProcessBuilder(commandLine.toArray())
              .directory(workingDirectory)
              .inheritIO();
              setEnv(envOptions, pb);
              m_frameworkProcess = pb.start();
          }
          catch( IOException e )
          {
              throw new ExecutionException( "Could not start up the process", e );
          }
  
          m_shutdownHook = createShutdownHook( m_frameworkProcess );
          Runtime.getRuntime().addShutdownHook( m_shutdownHook );
  
          LOG.debug( "Added shutdown hook." );
          LOG.info( "DefaultJavaRunner completed successfully" );
  
          if( m_wait )
          {
              waitForExit();
          }
          else
          {
              System.out.println();
          }
      }
docs: {@inheritDoc}