~~ 
~~ Licensed to the Apache Software Foundation (ASF) under one or more
~~  contributor license agreements.  See the NOTICE file distributed with
~~  this work for additional information regarding copyright ownership.
~~  The ASF licenses this file to You under the Apache License, Version 2.0
~~  (the "License"); you may not use this file except in compliance with
~~  the License.  You may obtain a copy of the License at
~~
~~      http://www.apache.org/licenses/LICENSE-2.0
~~
~~  Unless required by applicable law or agreed to in writing, software
~~  distributed under the License is distributed on an "AS IS" BASIS,
~~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~  See the License for the specific language governing permissions and
~~  limitations under the License.
~~
~~

 --------
Apache Commons Exec Technical Details
 --------
 --------
16 August 2010
 --------

Apache Commons Exec

* An Implementation Overview

  Looking at commons-exec can be a bit daunting the first time therefore an
  overview of the implementation helps.

** DefaultExecutor
  The main class is <<DefaultExecutor>> where you defined the command line
  of the sub-process to be executed.

