 ------
 Delete Additional Files Not Exposed to Maven
 ------
 John Casey
 Jesse McConnell
 ------
 22 June 2007
 ------

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/guides/mini/guide-apt-format.html

Patch Multiple Files from Multiple Directories

  The <<<maven-patch-plugin>>> can be configured apply sets of patches from multiple directories.
  In the example below, the plugin is setup to apply all the patches in a bugfix directory with 
  optimization (will not reapply the same patch) and also from an enhancements directory.  This 
  scenario might crop up if you don't have commit access to a projects source yet need to apply 
  bugfix and enhancement patches.  The two different patch source directories are shown purely as 
  an example of what can be configured.

+--------
<build>
  [...]
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-patch-plugin</artifactId>
            <version>1.0-SNAPSHOT</version>
            <configuration>
               <patchTargetDir>${moduleDirectory}</patchTargetDir>
               <skipApplication>false</skipApplication>
            </configuration>
            <executions>
               <execution>
                  <id>bugfix-patches</id>
                  <configuration>
                     <patchDirectory>src/main/patches/bugfix</patchDirecto
ry>
                     <patchTrackingFile>${project.build.directory}/optimization-
files/bugfix/patches-applied.txt</patchTrackingFile>
                     <naturalOrderProcessing>true</naturalOrderProcessing>
                  </configuration>
                  <phase>process-sources</phase>
                  <goals>
                     <goal>apply</goal>
                  </goals>
               </execution>
               <execution>
                  <id>enhancement-patches</id>
                  <configuration>
                     <patchDirectory>src/main/patches/enhancement</patchDirector
y>
                     <patchTrackingFile>${project.build.directory}/optimization-
files/enhancement/patches-applied.txt</patchTrackingFile>
                     <naturalOrderProcessing>true</naturalOrderProcessing>
                  </configuration>
                  <phase>process-sources</phase>
                  <goals>
                     <goal>apply</goal>
                  </goals>
               </execution>
            </executions>
          </plugin>
    
  [...]
</build>
+---------
