Package org.apache.maven.plugin.patch
Class ApplyMojo
- java.lang.Object
-
- org.apache.maven.plugin.AbstractMojo
-
- org.apache.maven.plugin.patch.ApplyMojo
-
- All Implemented Interfaces:
org.apache.maven.plugin.ContextEnabled
,org.apache.maven.plugin.Mojo
@Mojo(name="apply", defaultPhase=PROCESS_SOURCES) public class ApplyMojo extends org.apache.maven.plugin.AbstractMojo
Apply one or more patches to project sources.
-
-
Field Summary
Fields Modifier and Type Field Description private boolean
backups
Whether to make backups of the original files before modding them.private boolean
binary
apply --binary option to patch command linestatic java.util.List
DEFAULT_IGNORED_PATCH_PATTERNS
static java.util.List
DEFAULT_IGNORED_PATCHES
private java.io.File
destFile
The output file which is the original file, plus modifications from the patch.private boolean
failFast
Flag beingtrue
if the desired behavior is to fail the build on the first failed patch detected.private java.util.List
failurePhrases
List of phrases to watch for in the command output from the patch tool.private java.util.List
ignoredPatches
When thestrictPatching
flag is set, this parameter is useful to mark certain contents of the patch-source directory that should be ignored without causing the build to fail.private boolean
ignoreWhitespace
Whether to ignore whitespaces when applying the patches.private boolean
naturalOrderProcessing
Setting natural order processing totrue
will cause all patches in a directory to be processed in a natural order alleviating the need to declare patches directly in the project file.private boolean
optimizations
Flag to enable/disable optimization file from being written.private java.io.File
originalFile
The original file which will be modified by the patch.static java.util.List
PATCH_FAILURE_WATCH_PHRASES
private java.io.File
patchDirectory
The base directory for the file names specified by the parameterpatches
.protected java.util.List
patches
The list of patch file names, supplying the order in which patches should be applied.private java.io.File
patchFile
The single patch file to apply.private java.io.File
patchTrackingFile
This is the tracking file used to maintain a list of the patches applied to the unpacked project sources which are currently in the target directory.private boolean
removeEmptyFiles
When set totrue
, the empty files resulting from the patching process are removed.private boolean
reverse
Whether to treat these patches as having reversed source and dest in the patch syntax.private boolean
skipApplication
Whether to skip this goal's execution.private boolean
strictPatching
Flag that, when set totrue
, will make sure that all patches included in thepatches
list must be present and describe the full contents of the patch directory.private int
strip
The number of directories to be stripped from patch file paths, before applying, starting from the leftmost, or root-est.private java.io.File
targetDirectory
The target directory for applying patches.private boolean
useDefaultIgnores
Whether to exclude default ignored patch items, such as.svn
orCVS
directories.
-
Constructor Summary
Constructors Constructor Description ApplyMojo()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description private java.lang.String
applyPatches(java.util.Map patchesApplied)
private void
checkForWatchPhrases(java.lang.String output)
private void
checkStrictPatchCompliance(java.util.List foundPatchFiles)
private org.codehaus.plexus.util.cli.Commandline
createPatchCommand(java.io.File patchFile)
Add a new Patch task to the Ant calling mechanism.void
execute()
Apply the patches.private int
executeCommandLine(org.codehaus.plexus.util.cli.Commandline cli, org.codehaus.plexus.util.cli.StreamConsumer out, org.codehaus.plexus.util.cli.StreamConsumer err)
private java.util.Map
findPatchesToApply(java.util.List foundPatchFiles, java.io.File patchSourceDir)
private void
writeTrackingFile(java.util.Map patchesApplied)
-
-
-
Field Detail
-
PATCH_FAILURE_WATCH_PHRASES
public static final java.util.List PATCH_FAILURE_WATCH_PHRASES
-
DEFAULT_IGNORED_PATCHES
public static final java.util.List DEFAULT_IGNORED_PATCHES
-
DEFAULT_IGNORED_PATCH_PATTERNS
public static final java.util.List DEFAULT_IGNORED_PATCH_PATTERNS
-
useDefaultIgnores
@Parameter(defaultValue="true") private boolean useDefaultIgnores
Whether to exclude default ignored patch items, such as.svn
orCVS
directories.
-
patches
@Parameter protected java.util.List patches
The list of patch file names, supplying the order in which patches should be applied. The path names in this list must be relative to the base directory specified by the parameterpatchDirectory
. This parameter is mutually exclusive with thepatchfile
parameter.
-
skipApplication
@Parameter(alias="patch.apply.skip", defaultValue="false") private boolean skipApplication
Whether to skip this goal's execution.
-
optimizations
@Parameter(defaultValue="true") private boolean optimizations
Flag to enable/disable optimization file from being written. This file tracks the patches that were applied the last time this goal actually executed. It is required for cases where project-sources optimizations are enabled, since project-sources will not be re-unpacked if they are at least as fresh as the source archive. If we avoid re-unpacking project sources, we need to make sure we don't reapply patches.
Note: If the list of patches changes and this flag is enabled, a "mvn clean
" must be executed before the next build, to remove the tracking file.
-
patchTrackingFile
@Parameter(defaultValue="${project.build.directory}/optimization-files/patches-applied.txt") private java.io.File patchTrackingFile
This is the tracking file used to maintain a list of the patches applied to the unpacked project sources which are currently in the target directory. If this file is present, and project-source unpacking is optimized (meaning it won't re-unpack unless the project-sources archive is newer), this goal will not execute and no patches will be applied in the current build.
-
targetDirectory
@Parameter(alias="patchTargetDir", defaultValue="${project.build.sourceDirectory}") private java.io.File targetDirectory
The target directory for applying patches. Files in this directory will be modified.
-
failFast
@Parameter(defaultValue="true") private boolean failFast
Flag beingtrue
if the desired behavior is to fail the build on the first failed patch detected.
-
naturalOrderProcessing
@Parameter(defaultValue="false") private boolean naturalOrderProcessing
Setting natural order processing totrue
will cause all patches in a directory to be processed in a natural order alleviating the need to declare patches directly in the project file.
-
ignoredPatches
@Parameter private java.util.List ignoredPatches
When thestrictPatching
flag is set, this parameter is useful to mark certain contents of the patch-source directory that should be ignored without causing the build to fail.
-
strictPatching
@Parameter(defaultValue="false") private boolean strictPatching
Flag that, when set totrue
, will make sure that all patches included in thepatches
list must be present and describe the full contents of the patch directory. IfstrictPatching
is set totrue
, and thepatches
list has a value that does not correspond to a file in the patch directory, the build will fail. IfstrictPatching
is set totrue
, and the patch directory contains files not listed in thepatches
parameter, the build will fail. If set tofalse
, only the patches listed in thepatches
parameter that have corresponding files will be applied; the rest will be ignored.
-
strip
@Parameter(defaultValue="0") private int strip
The number of directories to be stripped from patch file paths, before applying, starting from the leftmost, or root-est.
-
ignoreWhitespace
@Parameter(defaultValue="true") private boolean ignoreWhitespace
Whether to ignore whitespaces when applying the patches.
-
reverse
@Parameter(defaultValue="false") private boolean reverse
Whether to treat these patches as having reversed source and dest in the patch syntax.
-
backups
@Parameter(defaultValue="false") private boolean backups
Whether to make backups of the original files before modding them.
-
failurePhrases
@Parameter private java.util.List failurePhrases
List of phrases to watch for in the command output from the patch tool. If one is found, it will cause the build to fail. All phrases should be lower-case only. By default, the phrasesfail
,skip
andreject
are used.
-
originalFile
@Parameter private java.io.File originalFile
The original file which will be modified by the patch. By default, the patch tool will automatically derive the original file from the header of the patch file.
-
destFile
@Parameter private java.io.File destFile
The output file which is the original file, plus modifications from the patch. By default, the file(s) will be patched inplace.
-
patchFile
@Parameter private java.io.File patchFile
The single patch file to apply. This parameter is mutually exclusive with thepatches
parameter.
-
patchDirectory
@Parameter(defaultValue="src/main/patches") private java.io.File patchDirectory
The base directory for the file names specified by the parameterpatches
.
-
removeEmptyFiles
@Parameter(defaultValue="false") private boolean removeEmptyFiles
When set totrue
, the empty files resulting from the patching process are removed. Empty ancestor directories are removed as well.- Since:
- 1.1
-
binary
@Parameter(defaultValue="false") private boolean binary
apply --binary option to patch command line- Since:
- 1.2
-
-
Method Detail
-
execute
public void execute() throws org.apache.maven.plugin.MojoExecutionException, org.apache.maven.plugin.MojoFailureException
Apply the patches. Give preference to patchFile over patchSourceDir/patches, and preference to originalFile over workDir.- Throws:
org.apache.maven.plugin.MojoExecutionException
org.apache.maven.plugin.MojoFailureException
-
findPatchesToApply
private java.util.Map findPatchesToApply(java.util.List foundPatchFiles, java.io.File patchSourceDir) throws org.apache.maven.plugin.MojoFailureException
- Throws:
org.apache.maven.plugin.MojoFailureException
-
checkStrictPatchCompliance
private void checkStrictPatchCompliance(java.util.List foundPatchFiles) throws org.apache.maven.plugin.MojoExecutionException
- Throws:
org.apache.maven.plugin.MojoExecutionException
-
applyPatches
private java.lang.String applyPatches(java.util.Map patchesApplied) throws org.apache.maven.plugin.MojoExecutionException
- Throws:
org.apache.maven.plugin.MojoExecutionException
-
executeCommandLine
private int executeCommandLine(org.codehaus.plexus.util.cli.Commandline cli, org.codehaus.plexus.util.cli.StreamConsumer out, org.codehaus.plexus.util.cli.StreamConsumer err) throws org.codehaus.plexus.util.cli.CommandLineException
- Throws:
org.codehaus.plexus.util.cli.CommandLineException
-
writeTrackingFile
private void writeTrackingFile(java.util.Map patchesApplied) throws org.apache.maven.plugin.MojoExecutionException
- Throws:
org.apache.maven.plugin.MojoExecutionException
-
checkForWatchPhrases
private void checkForWatchPhrases(java.lang.String output) throws org.apache.maven.plugin.MojoExecutionException
- Throws:
org.apache.maven.plugin.MojoExecutionException
-
createPatchCommand
private org.codehaus.plexus.util.cli.Commandline createPatchCommand(java.io.File patchFile)
Add a new Patch task to the Ant calling mechanism. Give preference to originalFile/destFile, then workDir, and finally ${basedir}.
-
-