In many case a plugin cannot run the tool in the same JVM and has to fork a new JVM. Plexus-utils provide the necessary support to run a process, but not dedicated to Maven nor Java.
JavaCommandBuilder uses the builder pattern to help creating a new JVM process and run it. The executed class is configured with a classPath set from project Scope, optionnaly adding some more Artifacts. System properties and environment can be set to tweak the forked JVM. Execution can use a timeout, the builder returning a boolean to indicate normal termination of the forked JVM.