<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you 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.
-->

<!--
  - The archetypes project defines a set of maven archetype plugins that can be
  - used to create an initial directory tree of files when starting a new JSF
  - project.
  -
  - This pom is used:
  - * as the parent pom for all individual archetype modules, to define common settings
  - * to define the common archetype website
  - * as a convenient tool for building all the archetype projects.
  -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.myfaces</groupId>
    <artifactId>myfaces</artifactId>
    <version>17</version>
  </parent>

  <groupId>org.apache.myfaces.buildtools</groupId>
  <artifactId>myfaces-archetype-parent</artifactId>
  <version>1.0.5-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>Apache MyFaces Buildtools Maven2 Archetype Parent</name>
  <url>http://myfaces.apache.org/build-tools/archetypes/</url>

  <issueManagement>
    <system>jira</system>
    <url>http://issues.apache.org/jira/browse/MYFACES</url>
  </issueManagement>

  <inceptionYear>2008</inceptionYear>

  <build>
      
    <!-- Since Maven 3.0, this is required to add scpexe as protocol for deploy. -->
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh-external</artifactId>
        <version>1.0-beta-7</version>
      </extension>
    </extensions>

    <resources>
      <resource>
        <directory>${basedir}</directory>
        <targetPath>META-INF</targetPath>
        <includes>
          <include>NOTICE.txt</include>
          <include>LICENSE.txt</include>
        </includes>
      </resource>
      <resource>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
    </resources>
  </build>

  <reporting>
    <plugins>
      <plugin>
        <artifactId>maven-project-info-reports-plugin</artifactId>
      </plugin>
      <plugin>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>2.5</version>
        <configuration>
          <rulesets>
            <ruleset>/rulesets/basic.xml</ruleset>
            <ruleset>/rulesets/unusedcode.xml</ruleset>
          </rulesets>
          <linkXref>true</linkXref>
          <minimumTokens>100</minimumTokens>
          <targetJdk>1.5</targetJdk>
        </configuration>
      </plugin>
    </plugins>
  </reporting>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-archetypes/</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/myfaces/myfaces-build-tools/trunk/maven2-archetypes/</developerConnection>
    <url>http://svn.apache.org/viewvc/myfaces/myfaces-build-tools/trunk/maven2-archetypes/</url>
  </scm>

  <modules>
    <module>myfaces-archetype-helloworld</module>
    <module>myfaces-archetype-helloworld20</module>
    <module>myfaces-archetype-helloworld20-debug</module>
    <module>myfaces-archetype-helloworld20-owb</module>
    <module>myfaces-archetype-helloworld-facelets</module>
    <module>myfaces-archetype-helloworld-portlets</module>
    <module>myfaces-archetype-tobago</module>
    <module>myfaces-archetype-trinidad</module>
    <module>myfaces-archetype-trinidad20</module>
    <module>myfaces-archetype-jsfcomponents</module>
    <module>myfaces-archetype-jsfcomponents20</module>
    <module>myfaces-archetype-codi-jsf12</module>
    <module>myfaces-archetype-codi-jsf20</module>
    <module>myfaces-archetype-core-integration-test</module>
    <module>myfaces-archetype-extscript-jsf20</module>
    <module>myfaces-archetype-meecrowave</module>
  </modules>

  <distributionManagement>
    <site>
      <id>apache.website</id>
      <url>scpexe://people.apache.org/www/myfaces.apache.org/build-tools/archetypes</url>
    </site>
  </distributionManagement>

</project>