<?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.
-->
<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</groupId>
    <artifactId>apache</artifactId>
    <version>18</version>
  </parent>
  <groupId>org.apache.turbine</groupId>
  <artifactId>turbine-webapp-4.0</artifactId>
  <version>1.0.2-SNAPSHOT</version>
  <packaging>maven-archetype</packaging>

  <name>Archetype - Turbine 4.0 WebApp</name>
  <description>This archetype sets up a web application project based on Apache Turbine 4.0</description>
  <url>http://turbine.apache.org</url>

  <inceptionYear>2011</inceptionYear>

  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</developerConnection>
    <url>http://svn.apache.org/viewvc/turbine/maven/archetypes/trunk/turbine-webapp-4.0/</url>
  </scm>
  
<build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.archetype</groupId>
        <artifactId>archetype-packaging</artifactId>
        <version>3.0.1</version>
      </extension>
    </extensions>

    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-archetype-plugin</artifactId>
          <version>3.0.1</version>
           <!-- skip tests in generated archetype's pom, here the integration-test would be skipped -->
          <!--configuration>
            <skip>true</skip>
          </configuration-->   
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

</project>
