# ArtifactHandler

API Documentation: | `ArtifactHandler`

This class is for defining artifacts to be published and adding them to configurations. Creating publish artifacts does not mean to create an archive. What is created is a domain object which represents a file to be published and information on how it should be published (e.g. the name).

To create an publish artifact and assign it to a configuration you can use the following syntax:

`<configurationName> <artifact-notation>, <artifact-notation> ...` or `<configurationName> <artifact-notation> { ... some code to configure the artifact }`

The notation can be one of the following types:

- `PublishArtifact`.
- `AbstractArchiveTask`. The information for publishing the artifact is extracted from the archive task (e.g. name, extension, ...). The task will be executed if the artifact is required.
- A `RegularFile` or `Directory`.
- A `Provider` of `File`, `RegularFile`, `Directory` or `Task`, with the limitation that the latter has to define a single file output property. The information for publishing the artifact is extracted from the file or directory name. When the provider represents an output of a particular task, that task will be executed if the artifact is required.
- `File`. The information for publishing the artifact is extracted from the file name.
- `Map`. The map should contain a 'file' key. This is converted to an artifact as described above. You can also specify other properties of the artifact using entries in the map.

In each case, a `ConfigurablePublishArtifact` instance is created for the artifact, to allow artifact properties to be configured. You can also override the default values for artifact properties by using a closure to configure the properties of the artifact instance

### Examples

An example showing how to associate an archive task with a configuration via the artifact handler. This way the archive can be published or referred in other projects via the configuration.

    configurations {
      //declaring new configuration that will be used to associate with artifacts
      schema
    }

    task schemaJar(type: Jar) {
      //some imaginary task that creates a jar artifact with some schema
    }

    //associating the task that produces the artifact with the configuration
    artifacts {
      //configuration name and the task:
      schema schemaJar
    }

### Properties

No properties

### Methods

Method | Description
`add(configurationName, artifactNotation)` | Adds an artifact to the given configuration.
`add(configurationName, artifactNotation, configureClosure)` | Adds an artifact to the given configuration.
`add(configurationName, artifactNotation, configureAction)` | Adds an artifact to the given configuration.

### Script blocks

No script blocks

### Method details

#### `PublishArtifact` `add`(`String` configurationName, `Object` artifactNotation)

Adds an artifact to the given configuration.

#### `PublishArtifact` `add`(`String` configurationName, `Object` artifactNotation, `Closure` configureClosure)

Adds an artifact to the given configuration.

#### `PublishArtifact` `add`(`String` configurationName, `Object` artifactNotation, ``Action`<? super `ConfigurablePublishArtifact`>` configureAction)

Adds an artifact to the given configuration.