You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by lt...@apache.org on 2005/10/12 02:15:15 UTC

svn commit: r312982 - in /maven/maven-1/plugins/trunk/pom: ./ src/plugin-resources/ src/plugin-resources/xsd/ src/plugin-resources/xsl/

Author: ltheussl
Date: Tue Oct 11 17:15:09 2005
New Revision: 312982

URL: http://svn.apache.org/viewcvs?rev=312982&view=rev
Log:
New attempt at pom:validate:

Every pom that does not extend another one (a root pom) has to comply
with the schema ${plugin.resources}/xsd/pom-strict-3.xsd (this needs review).

Running "pom:validate" on a child pom
will create another schema ${plugin.resources}/xsd/pom-extend-3.xsd
(if this doesn't exist already) via an xslt transformation using the
stylesheet ${plugin.resources}/xsl/pom-extend-3.xsl. This just replaces
all 'minOccurs="1"' attributes in pom-strict-3.xsd by 'minOccurs="0"'.

Namespace is still a problem, I removed it from the xsd (xml:parse seems not
to work on documents with namespace declarations?).

Added:
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/pom-strict-3.xsd
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/readme.txt
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/
    maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/pom-extend-3.xsl
Modified:
    maven/maven-1/plugins/trunk/pom/plugin.jelly
    maven/maven-1/plugins/trunk/pom/project.xml

Modified: maven/maven-1/plugins/trunk/pom/plugin.jelly
URL: http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/pom/plugin.jelly?rev=312982&r1=312981&r2=312982&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/pom/plugin.jelly (original)
+++ maven/maven-1/plugins/trunk/pom/plugin.jelly Tue Oct 11 17:15:09 2005
@@ -1,7 +1,7 @@
 <?xml version="1.0"?>
 <!-- 
 /*
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -25,6 +25,8 @@
   xmlns:plugin="plugin"
   xmlns:util="jelly:util"
   xmlns:ant="jelly:ant"
+  xmlns:x="jelly:xml"
+  xmlns:log="jelly:log"
   xmlns:artifact="artifact">
 
   <!-- set up pom tag library -->
@@ -59,14 +61,41 @@
     name="pom:validate"
     description="Validate the Maven XML project descriptor">
 
-    <j:set var="xsd" 
-        value="${maven.home}/maven-project-${pom.pomVersion}.xsd"/>
-    <util:file var="xsdAsFile" name="${xsd}"/>
-    <j:if test="${not(xsdAsFile.exists())}">
-      <j:set var="xsd" 
-          value="${maven.home}/maven-project.xsd"/>
+    <j:set var="xsd" value="${plugin.resources}/xsd/pom-strict-3.xsd"/>
+
+    <util:file var="pomAsFile" name="${pom.file.canonicalPath}" />
+    <j:if test="${pomAsFile != null}">
+      <x:parse var="parsedPom" xml="${pomAsFile}"/>
+      <x:set var="extends" select="$parsedPom/project/extend"/>
     </j:if>
-    <echo>xsd file: ${xsd}</echo>
+
+    <x:if select="$extends">
+      <log:warn>
+        <j:whitespace>
+  ***  WARNING  ***
+  ***  The current pom extends <x:expr select="$parsedPom/project/extend"/>
+  ***  This parent pom has to be validated separately!
+       </j:whitespace>
+      </log:warn>
+      <j:set var="available" value="false"/>
+      <util:available file="${plugin.resources}/xsd/pom-extend-3.xsd">
+        <j:set var="available" value="true"/>
+      </util:available>
+      <j:if test="${available == 'false'}">
+        <j:set var="xsl" value="${plugin.resources}/xsl/pom-extend-3.xsl"/>
+        <x:transform
+            xslt="file://${xsl}"
+            xml="file://${xsd}"
+            var="tmpVar"
+            validate="false"/>
+        <j:file name="${plugin.resources}/xsd/pom-extend-3.xsd">
+          <x:copyOf select="$tmpVar"/>
+        </j:file>
+      </j:if>
+      <j:set var="xsd" value="${plugin.resources}/xsd/pom-extend-3.xsd"/>
+    </x:if>
+
+    <log:info>Using xsd file: ${xsd}</log:info>
 
     <plugin:validate-xml
         schema="${xsd}"
@@ -84,7 +113,7 @@
     <j:set var="notices" value="${contentvalidator.execute()}"/>
      
     <j:forEach var="notice" items="${notices}">
-      <echo>${notice.Level} : ${notice.Section} : ${notice.Message}</echo>
+      <log:info>${notice.Level} : ${notice.Section} : ${notice.Message}</log:info>
     </j:forEach>
 
   </goal>

Modified: maven/maven-1/plugins/trunk/pom/project.xml
URL: http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/pom/project.xml?rev=312982&r1=312981&r2=312982&view=diff
==============================================================================
--- maven/maven-1/plugins/trunk/pom/project.xml (original)
+++ maven/maven-1/plugins/trunk/pom/project.xml Tue Oct 11 17:15:09 2005
@@ -88,6 +88,11 @@
       <version>1.4-dev-8</version>
     </dependency>
     <dependency>
+      <groupId>commons-jelly</groupId>
+      <artifactId>commons-jelly-tags-log</artifactId>
+      <version>1.0</version>
+    </dependency>
+    <dependency>
       <groupId>maven</groupId>
       <artifactId>maven</artifactId>
       <version>1.0</version>

Added: maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/pom-strict-3.xsd
URL: http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/pom-strict-3.xsd?rev=312982&view=auto
==============================================================================
--- maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/pom-strict-3.xsd (added)
+++ maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/pom-strict-3.xsd Tue Oct 11 17:15:09 2005
@@ -0,0 +1,1534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
+  <xs:element name="project" type="Model">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">The
+      &lt;code&gt;&amp;lt;project&amp;gt;&lt;/code&gt; element specifies
+      various attributes about a project. This is the root element of the
+      project descriptor. The following table lists all of the possible child
+      elements. Child elements with children are then documented further in
+      subsequent sections.</xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
+  <xs:complexType name="Model">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">The
+      &lt;code&gt;&amp;lt;project&amp;gt;&lt;/code&gt; element specifies
+      various attributes about a project. This is the root element of the
+      project descriptor. The following table lists all of the possible child
+      elements. Child elements with children are then documented further in
+      subsequent sections.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="extend" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The location of the parent
+          project, if one exists. Values from the parent project will be the
+          default for this project if they are left unspecified. The path may
+          be absolute, or relative to the current project.xml file. &lt;div
+          class="source"&gt;&lt;pre&gt;&amp;lt;extend&amp;gt;${basedir}/../project.xml&amp;lt;/extend&amp;gt;&lt;/pre&gt;&lt;/div&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="pomVersion">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The current version of the
+          Maven project descriptor. This version number enables Maven to
+          automatically update an out-of-date project descriptor when a new
+          version is available. This version number should not be changed
+          after the descriptor has been created. Maven will update it
+          automatically.</xs:documentation>
+        </xs:annotation>
+
+        <xs:simpleType>
+           <xs:restriction base="xs:string">
+             <xs:enumeration value="3"/>
+           </xs:restriction>
+        </xs:simpleType>
+
+      </xs:element>
+
+      <xs:element minOccurs="0" name="id" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The short name of the
+          project. This value is used when naming &lt;a
+          href="/plugins/java/index.html"&gt;jars&lt;/a&gt; and &lt;a
+          href="/plugins/dist/index.html"&gt;distribution
+          files&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="1" name="groupId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The short name of the project
+          group. This value is used to group all jars for a project in one
+          directory. For more info look at the &lt;a
+          href="/user-guide.html#Naming%20Conventions"&gt;user
+          guide&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="artifactId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The short name of the
+          project. This value is used in conjunction with
+          &lt;code&gt;groupId&lt;/code&gt; when naming &lt;a
+          href="/plugins/java/index.html"&gt;jars&lt;/a&gt; and &lt;a
+          href="/plugins/dist/index.html"&gt;distribution
+          files&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The full name of the project.
+          This value is used when generating &lt;a
+          href="/plugins/javadoc/index.html"&gt;JavaDoc&lt;/a&gt;
+          titles.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="1" name="currentVersion" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The current version of the
+          project. This value is used when naming &lt;a
+          href="/plugins/java/index.html"&gt;jars&lt;/a&gt; and &lt;a
+          href="/plugins/dist/index.html"&gt;distribution
+          files&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="shortDescription" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">A short description of the
+          project. The short description should be limited to a single
+          line.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="description" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Optional. A detailed
+          description of the project. This description is used as the default
+          to generate the &lt;a href="/plugins/site/index.html"&gt;Mailing
+          Lists&lt;/a&gt; of the project's web site, and is shown when
+          &lt;code&gt;maven --usage&lt;/code&gt; is called on the project.
+          While this element can be specified as CDATA to enable the use of
+          HTML tags within the description, you are encouraged to provide an
+          alternative home page using &lt;code&gt;xdocs/index.xml&lt;/code&gt;
+          if this is required.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL to the project's
+          homepage.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="logo" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The URL to the project's logo
+          image. This can be an URL relative to the base directory of the
+          generated web site, (e.g.,
+          &lt;code&gt;/images/project-logo.png&lt;/code&gt;) or an absolute
+          URL (e.g.,
+          &lt;code&gt;http://my.corp/project-logo.png&lt;/code&gt;). This is
+          used when generating the project documentation.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="issueTrackingUrl" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. The URL to the
+          project's issue tracking system.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="inceptionYear" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The year of the project's
+          inception specified with 4 digits. This value is used when
+          generating &lt;a
+          href="/plugins/javadoc/index.html"&gt;JavaDoc&lt;/a&gt; copyright
+          notices.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="gumpRepositoryId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. This is the Id of
+          the Gump repository that this project is part of (assuming it
+          participates in the Gump integration effort).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="siteAddress" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. The hostname of the
+          web server that hosts the project's web site. This is used when the
+          web site is &lt;a
+          href="/plugins/site/index.html"&gt;deployed&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="siteDirectory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. The directory on
+          the web server where the public web site for this project resides.
+          This is used when the web site is &lt;a
+          href="/plugins/site/index.html"&gt;deployed&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="distributionSite" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. The server server
+          where the final distributions will be published. This is used when
+          the distributions are &lt;a
+          href="/plugins/dist/index.html"&gt;deployed&lt;/a&gt;. &lt;p&gt; If
+          this isn't defined, the central repository is used instead as
+          determined by &lt;code&gt;maven.repo.central&lt;/code&gt; and
+          &lt;code&gt;maven.repo.central.directory&lt;/code&gt;
+          &lt;/p&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="distributionDirectory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. The directory on
+          the web server where the final distributions will be published. This
+          is used when the distributions are &lt;a
+          href="/plugins/dist/index.html"&gt;deployed&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="mailingLists">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Contains information about a
+          project's mailing lists. This is used to generate the &lt;a
+          href="/plugins/site/index.html"&gt;front page&lt;/a&gt; of the
+          site's web site.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="mailingList"
+                        type="MailingList"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="developers">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Describes the committers to a
+          project. This is used to generate the &lt;a
+          href="/plugins/site/index.html"&gt;Project Team&lt;/a&gt; page of
+          the project's web site.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="developer"
+                        type="Developer"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="contributors">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Describes the contributors to
+          a project. This is used to generate the &lt;a
+          href="/plugins/site/index.html"&gt;Project Team&lt;/a&gt; page of
+          the project's web site.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="contributor"
+                        type="Contributor"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="licenses">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">This element describes all of
+          the licenses for this project. Each license is described by a
+          &lt;code&gt;license&lt;/code&gt; element, which is then described by
+          additional elements (described below). The auto-generated site
+          documentation references this information. Projects should only list
+          the license(s) that applies to the project and not the licenses that
+          apply to dependencies.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="license"
+                        type="License"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="versions">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. Contains
+          information on previous versions of the project. This information is
+          used when invoking the &lt;a
+          href="/plugins/dist/index.html"&gt;&lt;code&gt;maven:dist&lt;/code&gt;&lt;/a&gt;
+          target.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="version"
+                        type="Version"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="branches">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Optional. Contains
+          information on branches of the project. This information is used
+          when invoking the &lt;a
+          href="/plugins/dist/index.html"&gt;&lt;code&gt;maven:dist&lt;/code&gt;&lt;/a&gt;
+          target.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" name="branch"
+                        type="Branch"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="packageGroups">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Package groups required for
+          complete javadocs.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded"
+                        name="packageGroup" type="PackageGroup"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="reports">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element includes the
+          specification of reports to be included in a Maven-generated site.
+          These reports will be run when a user executes &lt;code&gt;maven
+          site&lt;/code&gt;. All of the reports will be included in the
+          navigation bar for browsing in the order they are
+          specified.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="report"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="repository" type="Repository">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Specification for the SCM
+          used by the project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="organization" type="Organization">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">This element describes
+          various attributes of the organization to which the project belongs.
+          These attributes are utilized when documentation is created (for
+          copyright notices and links).</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="properties">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Project properties that will
+          be used by various plugins</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="package" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The Java package name of the
+          project. This value is used when generating &lt;a
+          href="/plugins/javadoc/index.html"&gt;JavaDoc&lt;/a&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="build" type="Build">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Information required to build
+          the project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="dependencies">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">&lt;p&gt; This element
+          describes all of the dependencies associated with a project. Each
+          dependency is described by a &lt;code&gt;dependency&lt;/code&gt;
+          element, which is then described by additional elements (described
+          below). &lt;/p&gt; &lt;p&gt; These dependencies are used to
+          construct a classpath for your project during the build process.
+          &lt;/p&gt; &lt;p&gt; Maven can automatically download these
+          dependencies from a &lt;a
+          href="/user-guide.html#Remote%20Repository%20Layout"&gt;remote
+          repository&lt;/a&gt;. &lt;/p&gt; &lt;p&gt; The filename that Maven
+          downloads from the repository is
+          &lt;code&gt;artifactId-version.jar&lt;/code&gt; where
+          &lt;code&gt;artifactId&lt;/code&gt; corresponds to the
+          &lt;code&gt;artifactId&lt;/code&gt; element and
+          &lt;code&gt;version&lt;/code&gt; corresponds to the
+          &lt;code&gt;version&lt;/code&gt; element. &lt;/p&gt; &lt;p&gt; When
+          Maven goes looking for a dependency in the remote repository, it
+          uses the dependency element to construct the URL to download from.
+          This URL is defined as: &lt;/p&gt; &lt;div class="source"&gt;
+          &lt;pre&gt;${repo}/${groupId}/${type}s/${artifactId}-${version}.${type}&lt;/pre&gt;
+          &lt;/div&gt; &lt;p&gt; Where &lt;/p&gt; &lt;dl&gt;
+          &lt;dt&gt;repo&lt;/dt&gt; &lt;dd&gt; is the remote repository URL
+          specified by &lt;code&gt;${maven.repo.remote}&lt;/code&gt;
+          &lt;/dd&gt; &lt;dt&gt;groupId&lt;/dt&gt; &lt;dd&gt;is taken from the
+          dependency element&lt;/dd&gt; &lt;dt&gt;type&lt;/dt&gt; &lt;dd&gt;is
+          taken from the dependency element&lt;/dd&gt;
+          &lt;dt&gt;artifactId&lt;/dt&gt; &lt;dd&gt;is taken from the
+          dependency element&lt;/dd&gt; &lt;dt&gt;version&lt;/dt&gt;
+          &lt;dd&gt;is taken from the dependency element&lt;/dd&gt;
+          &lt;/dl&gt;</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="dependency"
+                        type="Dependency"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Build">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="nagEmailAddress" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">An address to which
+          notifications regarding the status of builds for this project can be
+          sent. This is intended for use by tools which do unattended builds,
+          for example those providing for continuous integration. Currently
+          this is used by the &lt;a href="/plugins/gump/"&gt;gump
+          plugin&lt;/a&gt; target.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="sourceDirectory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">This element specifies a
+          directory containing the source of the project. The generated build
+          system will compile the source in this directory when the project is
+          built. The path given is relative to the project
+          descriptor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="unitTestSourceDirectory"
+                  type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element specifies a
+          directory containing the unit test source of the project. The
+          generated build system will compile these directories when the
+          project is being tested. The unit tests must use the JUnit test
+          framework. The path given is relative to the project
+          descriptor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="aspectSourceDirectory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element specifies a
+          directory containing Aspect sources of the project. The generated
+          build system will compile the Aspects in this directory when the
+          project is built if Aspects have been enabled (see the &lt;a
+          href="/plugins/aspectj/goals.html"&gt;Aspectj goals&lt;/a&gt;
+          document). The path given is relative to the project
+          descriptor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="integrationUnitTestSourceDirectory"
+                  type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element specifies a
+          directory containing integration test sources of the
+          project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="sourceModifications">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element describes all of
+          the sourceModifications associated with a project. Each source
+          modification is described by a
+          &lt;code&gt;sourceModification&lt;/code&gt; element, which is then
+          described by additional elements (described below). These
+          modifications are used to exclude or include various source
+          depending on the environment the build is running
+          in.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0"
+                        name="sourceModification" type="SourceModification"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="unitTest" type="UnitTest">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This element specifies unit
+          tests associated with the project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="defaultGoal" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The default goal (or phase in
+          Maven 2) to execute when none is specified for the
+          project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="resources">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">This element describes all of
+          the resources associated with a project or unit tests. Each resource
+          is described by a resource element, which is then described by
+          additional elements (described &lt;a
+          href="#resource"&gt;below&lt;/a&gt;). These resources are used to
+          complete the jar file or to run unit test.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="resource"
+                        type="Resource"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="UnitTest">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="resources">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="resource"
+                        type="Resource"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="includes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="include"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="excludes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="exclude"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Resource">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">This element describes all of the
+      resources associated with a project or unit tests. Each resource is
+      described by a resource element, which is then described by additional
+      elements (described &lt;a href="#resource"&gt;below&lt;/a&gt;). These
+      resources are used to complete the jar file or to run unit
+      test.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="targetPath" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Describe the resource target
+          path. For example, if you want that resource appear into a specific
+          package (&lt;code&gt;org.apache.maven.messages&lt;/code&gt;), you
+          must specify this element with this value :
+          &lt;code&gt;org/apache/maven/messages&lt;/code&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element default="false" minOccurs="0" name="filtering"
+                  type="xs:boolean">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Boolean. Describe if
+          resources are filtered or not.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="directory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Describe the directory where
+          the resource is stored. The path may be absolute, or relative to the
+          project.xml file.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="includes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="include"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="excludes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="exclude"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="SourceModification">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+
+      <xs:documentation source="description">This element describes all of the
+      sourceModifications associated with a project. Each source modification
+      is described by a &lt;code&gt;sourceModification&lt;/code&gt; element,
+      which is then described by additional elements (described below). These
+      modifications are used to exclude or include various source depending on
+      the environment the build is running in.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="className" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">If the class with this name
+          can &lt;strong&gt;not&lt;/strong&gt; be loaded, then the includes
+          and excludes specified below will be applied to the contents of the
+          &lt;a
+          href="#sourceDirectory"&gt;sourceDirectory&lt;/a&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="property" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="directory" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Describe the directory where
+          the resource is stored. The path may be absolute, or relative to the
+          project.xml file.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="includes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="include"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="excludes">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="exclude"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Organization">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">Specifies the organization who
+      produces this project.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The full name of the
+          organization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL to the organization's
+          home page.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="logo" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The URL to the organization's
+          logo image. This can be an URL relative to the base directory of the
+          generated web site, (e.g.,
+          &lt;code&gt;/images/org-logo.png&lt;/code&gt;) or an absolute URL
+          (e.g., &lt;code&gt;http://my.corp/logo.png&lt;/code&gt;). This value
+          is used when generating the project
+          documentation.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Developer">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">Information about one of the
+      committers on this project. Derived from
+      &lt;code&gt;Contributor&lt;/code&gt;.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="id" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The username of the
+          developer.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The full name of the
+          contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="email" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The email address of the
+          contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL for the homepage of
+          the contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="organization" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The organization to which the
+          contributor belongs.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="organizationUrl" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL of the
+          organization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="roles">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The roles the contributor
+          plays in the project. Each role is described by a
+          &lt;code&gt;role&lt;/code&gt; element, the body of which is a role
+          name.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="role"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="timezone" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The timezone the contributor
+          is in. This is a number in the range -11 to 12.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="properties">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Properties about the
+          contributor, such as an instant messenger handle.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Dependency">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="id" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">&lt;p&gt;The name of the
+          dependency.&lt;/p&gt; &lt;p&gt; &lt;strong&gt;Note:&lt;/strong&gt;
+          The use of the id element for a dependency is deprecated. Please use
+          &lt;code&gt;groupId&lt;/code&gt; and
+          &lt;code&gt;artifactId&lt;/code&gt; together instead.
+          &lt;/p&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="groupId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The project group that
+          produced the dependency, e.g.
+          &lt;code&gt;geronimo&lt;/code&gt;.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="artifactId" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The unique id for an artifact
+          produced by the project group, e.g.
+          &lt;code&gt;germonimo-jms&lt;/code&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="version" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The version of the
+          dependency, e.g. &lt;code&gt;3.2.1&lt;/code&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">This url will be provided to
+          the user if the jar file cannot be downloaded from the central
+          repository.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="jar" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Literal name of the artifact.
+          Used to override the calculated artifact name.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element default="jar" minOccurs="0" name="type" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The type of dependency. This
+          defaults to &lt;code&gt;jar&lt;/code&gt;. Known recognised
+          dependency types are: &lt;ul&gt;
+          &lt;li&gt;&lt;code&gt;jar&lt;/code&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;code&gt;ejb&lt;/code&gt;&lt;/li&gt;
+          &lt;li&gt;&lt;code&gt;plugin&lt;/code&gt;&lt;/li&gt;
+          &lt;/ul&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="properties">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Properties about the
+          dependency. Various plugins allow you to
+          &lt;code&gt;mark&lt;/code&gt; dependencies with properties. For
+          example the &lt;a href="/plugins/war/index.html"&gt;war&lt;/a&gt;
+          plugin looks for a &lt;code&gt;war.bundle&lt;/code&gt; property, and
+          if found will include the dependency in
+          &lt;code&gt;WEB-INF/lib&lt;/code&gt;. For example syntax, check the
+          war plugin docs.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Repository">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="connection" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">&lt;p&gt; Optional. The
+          source configuration management system URL that describes the
+          repository and how to connect to the repository. This is used by
+          Maven when &lt;a href="/plugins/dist/index.html"&gt;building
+          versions&lt;/a&gt; from specific ID. &lt;/p&gt; &lt;p&gt; The format
+          of this element is as follows: &lt;/p&gt;
+          &lt;pre&gt;scm:&amp;lt;provider&amp;gt;:&amp;lt;provider-parameters&amp;gt;&lt;/pre&gt;
+          &lt;p&gt;For cvs, the format for pserver repositories should
+          be:&lt;/p&gt; &lt;div class="source"&gt;
+          &lt;pre&gt;scm:cvs:pserver:user@host:/cvs/root:module-name&lt;/pre&gt;
+          &lt;/div&gt; &lt;p&gt; For local networked repositories (eg. pserver
+          to local machine) &lt;/p&gt; &lt;div class="source"&gt;
+          &lt;pre&gt;scm:cvs:lserver:user@host:/cvs/root:module-name&lt;/pre&gt;
+          &lt;/div&gt; &lt;p&gt; For ssh access: &lt;/p&gt; &lt;div
+          class="source"&gt;
+          &lt;pre&gt;scm:cvs:ext:user@host:/cvs/root:module-name&lt;/pre&gt;
+          &lt;/div&gt; Remember that CVS will expect an environment variable
+          called &lt;code&gt;CVS_RSH&lt;/code&gt; to be set, typically to
+          &lt;code&gt;ssh&lt;/code&gt; or your ssh client. &lt;p&gt; Some cvs
+          clients support other protocols, such as ntserver and extssh. Here's
+          an example using CVS NT and ntserver: &lt;/p&gt; &lt;div
+          class="source"&gt;
+          &lt;pre&gt;scm|cvs|ntserver|user@server|e:\cvs|Deployment&lt;/pre&gt;
+          &lt;/div&gt; Note the use of the vertical bar as delimiter as the
+          repository has a colon (&lt;code&gt;:&lt;/code&gt;) in it. &lt;p&gt;
+          For local file system repositories &lt;/p&gt; &lt;div
+          class="source"&gt;
+          &lt;pre&gt;scm:cvs:local:ignored:/cvs/root:module-name&lt;/pre&gt;
+          &lt;/div&gt; &lt;p&gt; For StarTeam access: &lt;/p&gt; &lt;div
+          class="source"&gt;
+          &lt;pre&gt;scm:starteam:username:password@host:port/project/view/folder&lt;/pre&gt;
+          &lt;/div&gt; All of this information can be had from either the
+          StarTeam Universal Client (Tools-&amp;gt;Server
+          Administration-&amp;gt;Server Properties) or from the administrator.
+          &lt;p&gt; The delimiter is determined by the character after "scm".
+          eg.
+          &lt;code&gt;scm|cvs|pserver|user@host|/cvs/root|module-name&lt;/code&gt;
+          is equivalent to that listed above. This can be useful for Windows
+          users who have : in their cvsroot parameter (eg. D:\cvsroot)
+          &lt;/p&gt; &lt;p&gt; Where &lt;code&gt;pserver&lt;/code&gt; is the
+          protocol used to access CVS, &lt;code&gt;user@host&lt;/code&gt; is
+          the user name to log in to the specified cvs
+          &lt;strong&gt;host&lt;/strong&gt;,
+          &lt;code&gt;/cvs/root&lt;/code&gt; is the cvs root directory, and
+          &lt;code&gt;module-name&lt;/code&gt; is the name of the cvs module
+          to be worked on &lt;/p&gt; &lt;p&gt;As an example, the settings for
+          an Apache project are usually:&lt;/p&gt;
+          &lt;pre&gt;scm:cvs:pserver:anoncvs@cvs.apache.org:/home/cvspublic:module-name&lt;/pre&gt;
+          &lt;p&gt; Currently CVS, Starteam and SubVersion are the only
+          supported scm's. Others will be added as soon as possible
+          &lt;/p&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="developerConnection" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">Just like connection, but for
+          developers, i.e. this scm connection will not be read
+          only.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The URL to the project's
+          browsable CVS repository.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="PackageGroup">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element minOccurs="0" name="title" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="packages" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">the
+          description</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Version">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+
+      <xs:documentation source="description">This element describes each of
+      the previous versions of the project. Each version is described by a
+      &lt;code&gt;version&lt;/code&gt; element</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The external version number
+          under which this release was distributed. Examples include:
+          &lt;code&gt;1.0&lt;/code&gt;, &lt;code&gt;1.1-alpha1&lt;/code&gt;,
+          &lt;code&gt;1.2-beta&lt;/code&gt;, &lt;code&gt;1.3.2&lt;/code&gt;
+          etc.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="tag" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The name given in the version
+          control system (e.g. cvs) used by the project for the source code
+          associated with this version of the project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="id" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">A unique identifier for a
+          version. This ID is used to specify the version that &lt;a
+          href="/plugins/dist/index.html"&gt;
+          &lt;code&gt;maven:dist&lt;/code&gt; &lt;/a&gt;
+          builds.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="License">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">Describes the licenses for this
+      project. This is used to generate the &lt;a
+      href="/plugins/site/index.html"&gt;License&lt;/a&gt; page of the
+      project's web site. Typically the licenses listed for the project are
+      that of the project itself, and not of dependencies.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The full legal name of the
+          license.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The official url for the
+          license text.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="distribution" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The primary method by which
+          this project may be distributed. &lt;dl&gt;
+          &lt;dt&gt;repo&lt;/dt&gt; &lt;dd&gt;may be downloaded from the Maven
+          repository&lt;/dd&gt; &lt;dt&gt;manual&lt;/dt&gt; &lt;dd&gt;user
+          must manually download and install the dependency.&lt;/dd&gt;
+          &lt;/dl&gt;</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="comments" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Addendum information
+          pertaining to this license.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Contributor">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">Description of a person who has
+      contributed to the project, but who does not have commit privileges.
+      Usually, these contributions come in the form of patches
+      submitted.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The full name of the
+          contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="email" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The email address of the
+          contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="url" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL for the homepage of
+          the contributor.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="organization" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The organization to which the
+          contributor belongs.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="organizationUrl" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The URL of the
+          organization.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="roles">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The roles the contributor
+          plays in the project. Each role is described by a
+          &lt;code&gt;role&lt;/code&gt; element, the body of which is a role
+          name.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0" name="role"
+                        type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="timezone" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The timezone the contributor
+          is in. This is a number in the range -11 to 12.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="properties">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">Properties about the
+          contributor, such as an instant messenger handle.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:any maxOccurs="unbounded" minOccurs="0" processContents="lax"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="Branch">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0</xs:documentation>
+
+      <xs:documentation source="description">Optional. Contains information on
+      branches of the project. This information is used when invoking the
+      &lt;a
+      href="/plugins/dist/index.html"&gt;&lt;code&gt;maven:dist&lt;/code&gt;&lt;/a&gt;
+      target.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="tag" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0</xs:documentation>
+
+          <xs:documentation source="description">The branch tag in the version
+          control system (e.g. cvs) used by the project for the source code
+          associated with this branch of the project.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+
+  <xs:complexType name="MailingList">
+    <xs:annotation>
+      <xs:documentation source="version">3.0.0+</xs:documentation>
+
+      <xs:documentation source="description">This element describes all of the
+      mailing lists associated with a project. Each mailing list is described
+      by a &lt;code&gt;mailingList&lt;/code&gt; element, which is then
+      described by additional elements (described below). The auto-generated
+      site documentation references this information.</xs:documentation>
+    </xs:annotation>
+
+    <xs:all>
+      <xs:element name="name" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The name of the mailing
+          list.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="subscribe" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The email address or link
+          that can be used to subscribe to the mailing list. If this is an
+          email address, a &lt;code&gt;mailto:&lt;/code&gt; link will
+          automatically be created when the documentation is
+          created.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element name="unsubscribe" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The email address or link
+          that can be used to unsubscribe to the mailing list. If this is an
+          email address, a &lt;code&gt;mailto:&lt;/code&gt; link will
+          automatically be created when the documentation is
+          created.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="post" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The email address or link
+          that can be used to post to the mailing list. If this is an email
+          address, a &lt;code&gt;mailto:&lt;/code&gt; link will automatically
+          be created when the documentation is created.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="archive" type="xs:string">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The link to a URL where you
+          can browse the mailing list archive.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
+
+      <xs:element minOccurs="0" name="otherArchives">
+        <xs:annotation>
+          <xs:documentation source="version">3.0.0+</xs:documentation>
+
+          <xs:documentation source="description">The link to other URLs where
+          you can browse the list archive.</xs:documentation>
+        </xs:annotation>
+
+        <xs:complexType>
+          <xs:sequence>
+            <xs:element maxOccurs="unbounded" minOccurs="0"
+                        name="otherArchive" type="xs:string"/>
+          </xs:sequence>
+        </xs:complexType>
+      </xs:element>
+    </xs:all>
+  </xs:complexType>
+</xs:schema>

Added: maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/readme.txt
URL: http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/readme.txt?rev=312982&view=auto
==============================================================================
--- maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/readme.txt (added)
+++ maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsd/readme.txt Tue Oct 11 17:15:09 2005
@@ -0,0 +1,17 @@
+Every pom that does not extend another one (a 'root' pom) has to comply
+with the schema ${plugin.resources}/xsd/pom-strict-3.xsd.
+
+Running "pom:validate" on a child pom (a pom that extends another one)
+will create another schema ${plugin.resources}/xsd/pom-extend-3.xsd
+(if this doesn't exist already) via an xslt transformation using the
+stylesheet ${plugin.resources}/xsl/pom-extend-3.xsl. This just replaces
+all 'minOccurs="1"' attributes in pom-strict-3.xsd by 'minOccurs="0"'.
+
+
+Note:
+
+* Every element that is required in a root pom but is not obligatory
+  in a child pom, needs a 'minOccurs="1"'.
+
+* Elements that are required in both parent and child poms, must not have
+  a 'minOccurs' attribute (so they default to 1).

Added: maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/pom-extend-3.xsl
URL: http://svn.apache.org/viewcvs/maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/pom-extend-3.xsl?rev=312982&view=auto
==============================================================================
--- maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/pom-extend-3.xsl (added)
+++ maven/maven-1/plugins/trunk/pom/src/plugin-resources/xsl/pom-extend-3.xsl Tue Oct 11 17:15:09 2005
@@ -0,0 +1,38 @@
+<!--
+/*
+ * Copyright 2001-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+ -->
+
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" >
+
+    <xsl:output method="xml" indent="yes" />
+
+    <xsl:template match="*|text()|@*">
+        <xsl:copy>
+            <xsl:apply-templates select="@*"/>
+            <xsl:apply-templates/>
+        </xsl:copy>
+    </xsl:template>
+
+    <xsl:template match="*[@minOccurs]">
+        <xsl:copy>
+            <xsl:apply-templates select="@*"/>
+            <xsl:attribute name="minOccurs">0</xsl:attribute>
+            <xsl:apply-templates/>
+        </xsl:copy>
+    </xsl:template>
+
+</xsl:stylesheet>