<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2006 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.
-->
<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.codehaus.mojo.archetypeng</groupId>
        <artifactId>maven-archetypeng-bundles</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>org.codehaus.mojo.archetypes</groupId>
    <artifactId>maven-archetypeng-site</artifactId>

    <name>Site Archetype</name>
    <packaging>maven-plugin</packaging>

    <description>
        An archetype which contains a sample Maven site which demonstrates some
        of the supported document types like APT, XDoc, and FML and demonstrates
        how to i18n your site. This archetype can be layered upon an existing
        Maven project.
    </description>
</project>
