Class 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 line
      static 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 being true 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 the strictPatching 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 to true 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 parameter patches.
      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 to true, 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 to true, will make sure that all patches included in the patches 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 or CVS directories.
      • Fields inherited from interface org.apache.maven.plugin.Mojo

        ROLE
    • 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)  
      • Methods inherited from class org.apache.maven.plugin.AbstractMojo

        getLog, getPluginContext, setLog, setPluginContext
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • 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 or CVS 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 parameter patchDirectory. This parameter is mutually exclusive with the patchfile 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 being true 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 to true 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 the strictPatching 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 to true, will make sure that all patches included in the patches list must be present and describe the full contents of the patch directory. If strictPatching is set to true, and the patches list has a value that does not correspond to a file in the patch directory, the build will fail. If strictPatching is set to true, and the patch directory contains files not listed in the patches parameter, the build will fail. If set to false, only the patches listed in the patches 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 phrases fail, skip and reject 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 the patches parameter.
      • patchDirectory

        @Parameter(defaultValue="src/main/patches")
        private java.io.File patchDirectory
        The base directory for the file names specified by the parameter patches.
      • removeEmptyFiles

        @Parameter(defaultValue="false")
        private boolean removeEmptyFiles
        When set to true, 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
    • Constructor Detail

      • ApplyMojo

        public ApplyMojo()
    • 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}.