<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://maven.apache.org/POM/4.0.0" xmlns="http://maven.apache.org/POM/4.0.0">
  <xs:element name="pluginMetadata" type="PluginMetadata">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">Root element of a script-based mojo&apos;s plugin metadata bindings.</xs:documentation>
    </xs:annotation>
  </xs:element>
  <xs:complexType name="PluginMetadata">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">Root element of a script-based mojo&apos;s plugin metadata bindings.</xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="mojos" minOccurs="0">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The list of mojos contained in the accompanying script.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="mojo" minOccurs="0" maxOccurs="unbounded" type="Mojo"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Mojo">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">Mojo descriptor definition.</xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="goal" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The name of the goal used to invoke this mojo.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="phase" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The phase to which this mojo should be bound by default.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="aggregator" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this mojo operates as an aggregator when the reactor is run. That is, only runs once.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="requiresDependencyResolution" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The scope of dependencies that this mojo requires to have resolved.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="requiresProject" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this mojo requires a project instance in order to execute.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="requiresReports" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this mojo requires a reports section in the POM.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="requiresOnline" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this mojo requires online mode to operate normally.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="inheritByDefault" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this mojo&apos;s configuration should propagate down the POM inheritance chain by default.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="requiresDirectInvocation" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">If true, this mojo can only be directly invoked (eg. specified directly on the command line).</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="execution" minOccurs="0" type="LifecycleExecution">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Information about a sub-execution of the Maven lifecycle which should be processed.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="components" minOccurs="0">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">List of plexus components required by this mojo.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="component" minOccurs="0" maxOccurs="unbounded" type="Component"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="parameters" minOccurs="0">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">List of parameters used by this mojo.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
          <xs:sequence>
            <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="Parameter"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="description" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The description for this parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="deprecation" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">A deprecation message for this mojo parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="call" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The target/method within the script to call when this mojo executes.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Parameter">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
      	A parameter used by a mojo, and configurable from the command line or POM configuration sections.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="name" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The parameter name</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="alias" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">An alternate name for the parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="property" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The JavaBeans property name to use to configure the mojo with this parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="required" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">Whether this parameter is required.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="readonly" minOccurs="0" type="xs:boolean" default="false">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            Whether this parameter can be directly edited. If false, this param is either derived from another POM element, or refers to a runtime instance of the build system.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="expression" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The command-line reference to this parameter.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="defaultValue" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            An expression in the form ${instance.property} for extracting a value for this parameter, especially from
            a runtime instance within the build system. (eg. ${project.build.directory} references 
            project.getBuild().getDirectory())
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="type" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">
            The java type for this parameter.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="description" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The description for this parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="deprecation" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">A deprecation message for this mojo parameter.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="Component">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
      	A reference to a plexus component, assumed to be available to the plugin container.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="role" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The component role to lookup.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="hint" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The role-hint to lookup.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
  <xs:complexType name="LifecycleExecution">
    <xs:annotation>
      <xs:documentation source="version">1.0.0</xs:documentation>
      <xs:documentation source="description">
      	A sub-process execution of a lifecycle to satisfy the needs of a mojo.
      </xs:documentation>
    </xs:annotation>
    <xs:all>
      <xs:element name="lifecycle" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The name of the overlay to apply to the sub-lifecycle before executing it. If specified, this lifecycle overlay definition will be bundled with the plugin.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="phase" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">The phase in the sub-lifecycle.</xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="goal" minOccurs="0" type="xs:string">
        <xs:annotation>
          <xs:documentation source="version">1.0.0</xs:documentation>
          <xs:documentation source="description">A goal, not attached to a lifecycle phase, which should be executed ahead of this mojo.</xs:documentation>
        </xs:annotation>
      </xs:element>
    </xs:all>
  </xs:complexType>
</xs:schema>
