<?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.sling</groupId>
        <artifactId>sling</artifactId>
        <version>38</version>
        <relativePath />
    </parent>

    <artifactId>sling-archetype-parent</artifactId>
    <packaging>pom</packaging>
    <version>6</version>

    <name>Apache Sling Archetype Parent</name>
    <description>The parent project for Apache Sling archetypes.</description>

    <properties>
        <!-- plugin versions to use in generated archetypes -->
        <bndplugin.version>5.0.1</bndplugin.version>
        <jarplugin.version>3.2.0</jarplugin.version>
        <compilerplugin.version>3.8.1</compilerplugin.version>
        <slingplugin.version>2.4.2</slingplugin.version>
        <launchpadplugin.version>2.3.2</launchpadplugin.version>
        <jarplugin.version>3.2.0</jarplugin.version>
        <warplugin.version>3.2.3</warplugin.version>
        <jettyplugin.version>6.1.23</jettyplugin.version>
        
        <!-- various properties which influence generated archetypes -->
        <archetype.java.version>11</archetype.java.version>
        
        <!-- dependency versions to use in generated archetypes -->
        <junit.version>4.12</junit.version>
        <slingapi.version>2.22.0</slingapi.version>
        <slf4japi.version>1.7.25</slf4japi.version>
        <versionannotations.version>1.1.0</versionannotations.version>
        <componentannotations.version>1.4.0</componentannotations.version>
        <metatypeannotations.version>1.4.0</metatypeannotations.version>
        
        <!-- define archetype tooling version in a central place -->
        <archetype.version>3.1.2</archetype.version>
        
    </properties>

    <scm>
        <connection>scm:git:https://gitbox.apache.org/repos/asf/sling-archetype-parent.git</connection>
        <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-archetype-parent.git</developerConnection>
        <url>https://gitbox.apache.org/repos/asf?p=sling-archetype-parent.git</url>
      <tag>sling-archetype-parent-6</tag>
  </scm>
    
    <build>
        <resources>
            <resource>
                <!-- filter pom.xml -->
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
                <includes>
                    <include>**/*</include>
                </includes>
            </resource>
        </resources>    
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-resources-plugin</artifactId>
                    <!-- 
                        allow defining un-filtered resources in the pom.xml
                        For example, the artifactId should not be escaped:
                        
                        <artifact>\${artifactId}</artifactId>
                     -->
                    <configuration>
                        <escapeString>\</escapeString>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-archetype-plugin</artifactId>
                    <version>${archetype.version}</version>
                    <extensions>true</extensions>
                    <!-- Verify archetype invocation was successful as part of the verify phase -->
                    <configuration>
                        <postBuildHookScript>verify.groovy</postBuildHookScript>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.rat</groupId>
                    <artifactId>apache-rat-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>src/test/resources/projects/*/goal.txt</exclude>
                        </excludes>
                    </configuration>
                </plugin>                
            </plugins>
        </pluginManagement>
    </build>

</project>
