1) Split into "pitcher" (ProcessExecutor) and "catcher" (ProcessLauncher) to improve readability
2) Split bootstrap and runtime classpath to improve environment independence
Bootstrap classpath only contains jars from appserver global classpath(where portal-service.jar lives), which is generally very small. It will be for sure within windows' pathetic max command line arguments limitation.
Runtime classpath is serialized to sub-process via pipe after bootstrap. It is used by dynamically created URLClassLoader for ProcessCallable deserialization and execution.