# Interface Manifest

public interface Manifest
Represents the manifest file of a JAR file.

Since:
  0.9

- ## Method Summary

  Modifier and Type
  Method
  Description
  `Manifest`
  `attributes(Map<String,?> attributes)`
  Adds content to the main attributes of the manifest.
  `Manifest`
  `attributes(Map<String,?> attributes, String sectionName)`
  Adds content to the given section of the manifest.
  `Manifest`
  `from(Object... mergePath)`
  Specifies other manifests to be merged into this manifest.
  `Manifest`
  `from(Object mergePath, Closure<?> closure)`
  Specifies other manifests to be merged into this manifest.
  `Manifest`
  `from(Object mergePath, Action<ManifestMergeSpec> action)`
  Specifies other manifests to be merged into this manifest.
  `Attributes`
  `getAttributes()`
  Returns the main attributes of the manifest.
  `Manifest`
  `getEffectiveManifest()`
  Returns a new manifest instance where all the attribute values are expanded (e.g.
  `Map<String, Attributes>`
  `getSections()`
  Returns the sections of the manifest (excluding the main section).
  `Manifest`
  `writeTo(Object path)`
  Writes the manifest into a file.

- ## Method Details

  - ### getAttributes

    Attributes getAttributes()
    Returns the main attributes of the manifest.
    Since:
      0.9

  - ### getSections

    Map<String, Attributes> getSections()
    Returns the sections of the manifest (excluding the main section).
    Returns:
      A map with the sections, where the key represents the section name and value the section attributes.
    Since:
      0.9

  - ### attributes

    Manifest attributes(Map<String,?> attributes) throws ManifestException
    Adds content to the main attributes of the manifest.
    Parameters:
      `attributes` - The values to add to the main attributes. The values can be any object, including `Provider` instances. Provider values are queried lazily either before writing or when `getEffectiveManifest()` is called. Non-provider values are evaluated by using their `Object.toString()` method.
    Returns:
      this
    Throws:
      `ManifestException` - If a key is invalid according to the manifest spec or if a key or value is null.
    Since:
      0.9

  - ### attributes

    Manifest attributes(Map<String,?> attributes, String sectionName) throws ManifestException
    Adds content to the given section of the manifest.
    Parameters:
      `attributes` - The values to add to the section. The values can be any object, including `Provider` instances. Provider values are queried lazily either before writing or when `getEffectiveManifest()` is called. Non-provider values are evaluated by using their `Object.toString()` method.
      `sectionName` - The name of the section
    Returns:
      this
    Throws:
      `ManifestException` - If a key is invalid according to the manifest spec or if a key or value is null.
    Since:
      0.9

  - ### getEffectiveManifest

    Manifest getEffectiveManifest()
    Returns a new manifest instance where all the attribute values are expanded (e.g. their toString method is called). The returned manifest also contains all the attributes of the to be merged manifests specified in `from(Object...)`.
    Since:
      0.9

  - ### writeTo

    Manifest writeTo(Object path)
    Writes the manifest into a file. The path's are resolved as defined by `Project.files(Object...)` The manifest will be encoded using the character set defined by the `Jar.getManifestContentCharset()` property.
    Parameters:
      `path` - The path of the file to write the manifest into.
    Returns:
      this
    Since:
      0.9

  - ### from

    Manifest from(Object... mergePath)
    Specifies other manifests to be merged into this manifest. A merge path can either be another instance of `Manifest` or a file path as interpreted by `Project.file(Object)`. The merge is not happening instantaneously. It happens either before writing or when `getEffectiveManifest()` is called.
    Returns:
      this
    Since:
      0.9

  - ### from

    Manifest from(Object mergePath, @DelegatesTo(ManifestMergeSpec.class) Closure<?> closure)
    Specifies other manifests to be merged into this manifest. A merge path is interpreted as described in `from(Object...)`. The merge is not happening instantaneously. It happens either before writing or when `getEffectiveManifest()` is called. The closure configures the underlying `ManifestMergeSpec`.
    Returns:
      this
    Since:
      0.9

  - ### from

    Manifest from(Object mergePath, Action<ManifestMergeSpec> action)
    Specifies other manifests to be merged into this manifest. A merge path is interpreted as described in `from(Object...)`. The merge is not happening instantaneously. It happens either before writing or when `getEffectiveManifest()` is called.
    Returns:
      this
    Since:
      5.0