code: def runjava(self, classpath, main, jvm_options=None, args=None, workunit_name=None,
                workunit_labels=None, workunit_log_config=None, dist=None):
      
      executor = self.create_java_executor(dist=dist)
  
      # Creating synthetic jar to work around system arg length limit is not necessary
      # when `NailgunExecutor` is used because args are passed through socket, therefore turning off
      # creating synthetic jar if nailgun is used.
      create_synthetic_jar = self.execution_strategy != self.NAILGUN
      try:
        return util.execute_java(classpath=classpath,
                                 main=main,
                                 jvm_options=jvm_options,
                                 args=args,
                                 executor=executor,
                                 workunit_factory=self.context.new_workunit,
                                 workunit_name=workunit_name,
                                 workunit_labels=workunit_labels,
                                 workunit_log_config=workunit_log_config,
                                 create_synthetic_jar=create_synthetic_jar,
                                 synthetic_jar_dir=self._executor_workdir)
      except executor.Error as e:
        raise TaskError(e)
docs: Runs the java main using the given classpath and args.
  
      If --execution-strategy=subprocess is specified then the java main is run in a freshly spawned
      subprocess, otherwise a persistent nailgun server dedicated to this Task subclass is used to
      speed up amortized run times.
  
      :API: public