def execute_java_async(classpath, main, jvm_options=None, args=None, executor=None,
                       workunit_factory=None, workunit_name=None, workunit_labels=None,
                       cwd=None, workunit_log_config=None, distribution=None,
                       create_synthetic_jar=True, synthetic_jar_dir=None):

  runner = _get_runner(classpath, main, jvm_options, args, executor, cwd, distribution,
                       create_synthetic_jar, synthetic_jar_dir)
  workunit_name = workunit_name or main

  return execute_runner_async(runner,
                              workunit_factory=workunit_factory,
                              workunit_name=workunit_name,
                              workunit_labels=workunit_labels,
                              workunit_log_config=workunit_log_config)
This is just like execute_java except that it returns a ProcessHandler rather than a return code.
dataset/ETHPy150Open pantsbuild/pants/src/python/pants/java/util.py/execute_java_async