I'm curious about this pattern of using subprocess.  It seems elaborate.  Why do we need all of this machinery?  Do we have unusual requirements that most Paver users don't?  What is the typical Paver solution to the problem this is solving?  If we do decide to keep it, at least we can encapsulate it somehow so we don't have to repeat it.