org.gradle.api.file

## Interface CopySpec

- All Superinterfaces:
    ContentFilterable, CopyProcessingSpec, CopySourceSpec, PatternFilterable
  All Known Implementing Classes:
    AbstractArchiveTask, AbstractCopyTask, Copy, Jar, ProcessResources, Sync, Tar, Zip

      public interface CopySpec
      extends CopySourceSpec, CopyProcessingSpec, PatternFilterable

  A set of specifications for copying files. This includes:
  - source directories (multiples allowed)
  - destination directory
  - ANT like include patterns
  - ANT like exclude patterns
  - File relocating rules
  - renaming rules
  - content filters
  CopySpecs may be nested by passing a closure to one of the from methods. The closure creates a child CopySpec and delegates methods in the closure to the child. Child CopySpecs inherit any values specified in the parent. This allows constructs like:

       def myCopySpec = project.copySpec {
         into('webroot')
         exclude('**/.data/**')
         from('src/main/webapp') {
           include '**/*.jsp'
         }
         from('src/main/js') {
           include '**/*.js'
         }
       }

  In this example, the `into` and `exclude` specifications at the root level are inherited by the two child CopySpecs. Copy specs can be reused in other copy specs via `with(CopySpec...)` method. This enables reuse of the copy spec instances.

       def contentSpec = copySpec {
         from("content") {
           include "**/*.txt"
         }
       }

       task copy(type: Copy) {
         into "$buildDir/copy"
         with contentSpec
       }

  See Also:
    `Copy Task`, `Project.copy()`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `CopySpec` | `eachFile(Action<? super FileCopyDetails> action)` Adds an action to be applied to each file as it is about to be copied into its destination.
    `CopySpec` | `eachFile(Closure closure)` Adds an action to be applied to each file as it about to be copied into its destination.
    `CopySpec` | `exclude(Closure excludeSpec)` Adds an exclude spec.
    `CopySpec` | `exclude(Iterable<String> excludes)` Adds an ANT style exclude pattern.
    `CopySpec` | `exclude(Spec<FileTreeElement> excludeSpec)` Adds an exclude spec.
    `CopySpec` | `exclude(String... excludes)` Adds an ANT style exclude pattern.
    `CopySpec` | `expand(Map<String,?> properties)` Expands property references in each file as it is copied.
    `CopySpec` | `filesMatching(String pattern, Action<? super FileCopyDetails> action)` Configure the `FileCopyDetails` for each file whose path matches the specified Ant-style pattern.
    `CopySpec` | `filesNotMatching(String pattern, Action<? super FileCopyDetails> action)` Configure the `FileCopyDetails` for each file whose path does not match the specified Ant-style pattern.
    `CopySpec` | `filter(Class<? extends FilterReader> filterType)` Adds a content filter to be used during the copy.
    `CopySpec` | `filter(Closure closure)` Adds a content filter based on the provided closure.
    `CopySpec` | `filter(Map<String,?> properties, Class<? extends FilterReader> filterType)` Adds a content filter to be used during the copy.
    `CopySpec` | `from(Object... sourcePaths)` Specifies source files or directories for a copy.
    `CopySpec` | `from(Object sourcePath, Closure c)` Specifies the source files or directories for a copy and creates a child `CopySourceSpec`.
    `DuplicatesStrategy` | `getDuplicatesStrategy()` Returns the strategy to use when trying to copy more than one file to the same destination.
    `boolean` | `getIncludeEmptyDirs()` Tells if empty target directories will be included in the copy.
    `CopySpec` | `include(Closure includeSpec)` Adds an include spec.
    `CopySpec` | `include(Iterable<String> includes)` Adds an ANT style include pattern.
    `CopySpec` | `include(Spec<FileTreeElement> includeSpec)` Adds an include spec.
    `CopySpec` | `include(String... includes)` Adds an ANT style include pattern.
    `CopySpec` | `into(Object destPath)` Specifies the destination directory for a copy.
    `CopySpec` | `into(Object destPath, Closure configureClosure)` Creates and configures a child `CopySpec` with the given destination path.
    `boolean` | `isCaseSensitive()` Specifies whether case-sensitive pattern matching should be used.
    `CopySpec` | `rename(Closure closure)` Renames a source file to a different relative location under the target directory.
    `CopyProcessingSpec` | `rename(Pattern sourceRegEx, String replaceWith)` Renames files based on a regular expression.
    `CopySpec` | `rename(String sourceRegEx, String replaceWith)` Renames files based on a regular expression.
    `void` | `setCaseSensitive(boolean caseSensitive)` Specifies whether case-sensitive pattern matching should be used for this CopySpec.
    `void` | `setDuplicatesStrategy(DuplicatesStrategy strategy)` The strategy to use when trying to copy more than one file to the same destination.
    `CopySpec` | `setExcludes(Iterable<String> excludes)` Set the allowable exclude patterns.
    `void` | `setIncludeEmptyDirs(boolean includeEmptyDirs)` Controls if empty target directories should be included in the copy.
    `CopySpec` | `setIncludes(Iterable<String> includes)` Set the allowable include patterns.
    `CopySpec` | `with(CopySpec... sourceSpecs)` Adds the given specs as a child of this spec.

    - ### Methods inherited from interface org.gradle.api.file.CopyProcessingSpec

      `getDirMode, getFileMode, setDirMode, setFileMode`

    - ### Methods inherited from interface org.gradle.api.tasks.util.PatternFilterable

      `getExcludes, getIncludes`

- - ### Method Detail

    - #### isCaseSensitive

          boolean isCaseSensitive()

      Specifies whether case-sensitive pattern matching should be used.
      Returns:
        true for case-sensitive matching.

    - #### setCaseSensitive

          void setCaseSensitive(boolean caseSensitive)

      Specifies whether case-sensitive pattern matching should be used for this CopySpec.
      Parameters:
        `caseSensitive` - true for case-sensitive matching.

    - #### getIncludeEmptyDirs

          boolean getIncludeEmptyDirs()

      Tells if empty target directories will be included in the copy.
      Returns:
        `true` if empty target directories will be included in the copy, `false` otherwise

    - #### setIncludeEmptyDirs

          void setIncludeEmptyDirs(boolean includeEmptyDirs)

      Controls if empty target directories should be included in the copy.
      Parameters:
        `includeEmptyDirs` - `true` if empty target directories should be included in the copy, `false` otherwise

    - #### getDuplicatesStrategy

          @Incubating
          DuplicatesStrategy getDuplicatesStrategy()

      Returns the strategy to use when trying to copy more than one file to the same destination.

      The value can be set with a case insensitive string of the enum value (e.g. `'exclude'` for `DuplicatesStrategy.EXCLUDE`).

      This strategy can be overridden for individual files by using `eachFile(org.gradle.api.Action)` or `filesMatching(String, org.gradle.api.Action)`.

      Returns:
        the strategy to use for files included by this copy spec.
      See Also:
        `DuplicatesStrategy`

    - #### setDuplicatesStrategy

          @Incubating
          void setDuplicatesStrategy(@Nullable
                                              DuplicatesStrategy strategy)

      The strategy to use when trying to copy more than one file to the same destination. Set to `null` to use the default strategy, which is inherited from the parent copy spec, if any, or `DuplicatesStrategy.INCLUDE` if this copy spec has no parent.

    - #### filesMatching

          @Incubating
          CopySpec filesMatching(String pattern,
                                          Action<? super FileCopyDetails> action)

      Configure the `FileCopyDetails` for each file whose path matches the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.
      Parameters:
        `pattern` - Ant-style pattern used to match against files' relative paths
        `action` - action called for the FileCopyDetails of each file matching pattern
      Returns:
        this

    - #### filesNotMatching

          @Incubating
          CopySpec filesNotMatching(String pattern,
                                             Action<? super FileCopyDetails> action)

      Configure the `FileCopyDetails` for each file whose path does not match the specified Ant-style pattern. This is equivalent to using eachFile() and selectively applying a configuration based on the file's path.
      Parameters:
        `pattern` - Ant-style pattern used to match against files' relative paths
        `action` - action called for the FileCopyDetails of each file that does not match pattern
      Returns:
        this

    - #### with

          CopySpec with(CopySpec... sourceSpecs)

      Adds the given specs as a child of this spec.

           def contentSpec = copySpec {
             from("content") {
               include "**/*.txt"
             }
           }

           task copy(type: Copy) {
             into "$buildDir/copy"
             with contentSpec
           }

      Parameters:
        `sourceSpecs` - The specs to add
      Returns:
        this

    - #### from

          CopySpec from(Object... sourcePaths)

      Specifies source files or directories for a copy. The given paths are evaluated as per `Project.files(Object...)`.
      Specified by:
        `from` in interface `CopySourceSpec`
      Parameters:
        `sourcePaths` - Paths to source files for the copy

    - #### from

          CopySpec from(Object sourcePath,
                      Closure c)

      Specifies the source files or directories for a copy and creates a child `CopySourceSpec`. The given source path is evaluated as per `Project.files(Object...)` .
      Specified by:
        `from` in interface `CopySourceSpec`
      Parameters:
        `sourcePath` - Path to source for the copy
        `c` - closure for configuring the child CopySourceSpec

    - #### setIncludes

          CopySpec setIncludes(Iterable<String> includes)

      Set the allowable include patterns. Note that unlike `PatternFilterable.include(Iterable)` this replaces any previously defined includes.
      Specified by:
        `setIncludes` in interface `PatternFilterable`
      Parameters:
        `includes` - an Iterable providing new include patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### setExcludes

          CopySpec setExcludes(Iterable<String> excludes)

      Set the allowable exclude patterns. Note that unlike `PatternFilterable.exclude(Iterable)` this replaces any previously defined excludes.
      Specified by:
        `setExcludes` in interface `PatternFilterable`
      Parameters:
        `excludes` - an Iterable providing new exclude patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### include

          CopySpec include(String... includes)

      Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.
      Specified by:
        `include` in interface `PatternFilterable`
      Parameters:
        `includes` - a vararg list of include patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### include

          CopySpec include(Iterable<String> includes)

      Adds an ANT style include pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns to be processed.
      Specified by:
        `include` in interface `PatternFilterable`
      Parameters:
        `includes` - a Iterable providing more include patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### include

          CopySpec include(Spec<FileTreeElement> includeSpec)

      Adds an include spec. This method may be called multiple times to append new specs. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.
      Specified by:
        `include` in interface `PatternFilterable`
      Parameters:
        `includeSpec` - the spec to add
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### include

          CopySpec include(Closure includeSpec)

      Adds an include spec. This method may be called multiple times to append new specs. The given closure is passed a `FileTreeElement` as its parameter. If includes are not provided, then all files in this container will be included. If includes are provided, then a file must match at least one of the include patterns or specs to be included.
      Specified by:
        `include` in interface `PatternFilterable`
      Parameters:
        `includeSpec` - the spec to add
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### exclude

          CopySpec exclude(String... excludes)

      Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
      Specified by:
        `exclude` in interface `PatternFilterable`
      Parameters:
        `excludes` - a vararg list of exclude patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### exclude

          CopySpec exclude(Iterable<String> excludes)

      Adds an ANT style exclude pattern. This method may be called multiple times to append new patterns and multiple patterns may be specified in a single call. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
      Specified by:
        `exclude` in interface `PatternFilterable`
      Parameters:
        `excludes` - a Iterable providing new exclude patterns
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### exclude

          CopySpec exclude(Spec<FileTreeElement> excludeSpec)

      Adds an exclude spec. This method may be called multiple times to append new specs. If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
      Specified by:
        `exclude` in interface `PatternFilterable`
      Parameters:
        `excludeSpec` - the spec to add
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### exclude

          CopySpec exclude(Closure excludeSpec)

      Adds an exclude spec. This method may be called multiple times to append new specs.The given closure is passed a `FileTreeElement` as its parameter. The closure should return true or false. Example:

           copySpec {
             from 'source'
             into 'destination'
             //an example of excluding files from certain configuration:
             exclude { it.file in configurations.someConf.files }
           }

      If excludes are not provided, then no files will be excluded. If excludes are provided, then files must not match any exclude pattern to be processed.
      Specified by:
        `exclude` in interface `PatternFilterable`
      Parameters:
        `excludeSpec` - the spec to add
      Returns:
        this
      See Also:
        `Pattern Format`

    - #### into

          CopySpec into(Object destPath)

      Specifies the destination directory for a copy. The destination is evaluated as per `Project.file(Object)`.
      Specified by:
        `into` in interface `CopyProcessingSpec`
      Parameters:
        `destPath` - Path to the destination directory for a Copy
      Returns:
        this

    - #### into

          CopySpec into(Object destPath,
                      Closure configureClosure)

      Creates and configures a child `CopySpec` with the given destination path. The destination is evaluated as per `Project.file(Object)`.
      Parameters:
        `destPath` - Path to the destination directory for a Copy
        `configureClosure` - The closure to use to configure the child `CopySpec`.
      Returns:
        this

    - #### rename

          CopySpec rename(Closure closure)

      Renames a source file to a different relative location under the target directory. The closure will be called with a single parameter, the name of the file. The closure should return a String object with a new target name. The closure may return null, in which case the original name will be used.
      Specified by:
        `rename` in interface `CopyProcessingSpec`
      Parameters:
        `closure` - rename closure
      Returns:
        this

    - #### rename

          CopySpec rename(String sourceRegEx,
                        String replaceWith)

      Renames files based on a regular expression. Uses java.util.regex type of regular expressions. Note that the replace string should use the '$1' syntax to refer to capture groups in the source regular expression. Files that do not match the source regular expression will be copied with the original name.

      Example:

           rename '(.*)_OEM_BLUE_(.*)', '$1$2'

      would map the file 'style_OEM_BLUE_.css' to 'style.css'
      Specified by:
        `rename` in interface `CopyProcessingSpec`
      Parameters:
        `sourceRegEx` - Source regular expression
        `replaceWith` - Replacement string (use $ syntax for capture groups)
      Returns:
        this

    - #### rename

          CopyProcessingSpec rename(Pattern sourceRegEx,
                                  String replaceWith)

      Renames files based on a regular expression. See `CopyProcessingSpec.rename(String, String)`.
      Specified by:
        `rename` in interface `CopyProcessingSpec`
      Parameters:
        `sourceRegEx` - Source regular expression
        `replaceWith` - Replacement string (use $ syntax for capture groups)
      Returns:
        this

    - #### filter

          CopySpec filter(Map<String,?> properties,
                        Class<? extends FilterReader> filterType)

      Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement `java.io.FilterReader`. Include `org.apache.tools.ant.filters.*` for access to all the standard Ant filters.

      Filter properties may be specified using groovy map syntax.

      Examples:

              filter(HeadFilter, lines:25, skip:2)
              filter(ReplaceTokens, tokens:[copyright:'2009', version:'2.3.1'])

      Specified by:
        `filter` in interface `ContentFilterable`
      Parameters:
        `properties` - map of filter properties
        `filterType` - Class of filter to add
      Returns:
        this

    - #### filter

          CopySpec filter(Class<? extends FilterReader> filterType)

      Adds a content filter to be used during the copy. Multiple calls to filter, add additional filters to the filter chain. Each filter should implement `java.io.FilterReader`. Include `org.apache.tools.ant.filters.*` for access to all the standard Ant filters.

      Examples:

              filter(StripJavaComments)
              filter(com.mycompany.project.CustomFilter)

      Specified by:
        `filter` in interface `ContentFilterable`
      Parameters:
        `filterType` - Class of filter to add
      Returns:
        this

    - #### filter

          CopySpec filter(Closure closure)

      Adds a content filter based on the provided closure. The Closure will be called with each line (stripped of line endings) and should return a String to replace the line or `null` to remove the line. If every line is removed, the result will be an empty file, not an absent one.
      Specified by:
        `filter` in interface `ContentFilterable`
      Parameters:
        `closure` - to implement line based filtering
      Returns:
        this

    - #### expand

          CopySpec expand(Map<String,?> properties)

      Expands property references in each file as it is copied. More specifically, each file is transformed using Groovy's `SimpleTemplateEngine`. This means you can use simple property references, such as `$property` or `${property}` in the file. You can also include arbitrary Groovy code in the file, such as `${version ?: 'unknown'}` or `${classpath*.name.join(' ')}`

      Specified by:
        `expand` in interface `ContentFilterable`
      Parameters:
        `properties` - to implement line based filtering
      Returns:
        this

    - #### eachFile

          CopySpec eachFile(Action<? super FileCopyDetails> action)

      Adds an action to be applied to each file as it is about to be copied into its destination. The action can change the destination path of the file, filter the contents of the file, or exclude the file from the result entirely. Actions are executed in the order added, and are inherited from the parent spec.
      Specified by:
        `eachFile` in interface `CopyProcessingSpec`
      Parameters:
        `action` - The action to execute.
      Returns:
        this

    - #### eachFile

          CopySpec eachFile(Closure closure)

      Adds an action to be applied to each file as it about to be copied into its destination. The given closure is called with a `FileCopyDetails` as its parameter. Actions are executed in the order added, and are inherited from the parent spec.
      Specified by:
        `eachFile` in interface `CopyProcessingSpec`
      Parameters:
        `closure` - The action to execute.
      Returns:
        this