<?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.
-->

<component-set>
  <components>
    <!--
     | WAR
     |-->
    <component>
      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
      <role-hint>war</role-hint>
      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
      <configuration>
        <type>war</type>
        <includesDependencies>true</includesDependencies>
        <language>java</language>
        <addedToClasspath>false</addedToClasspath>
      </configuration>
    </component>

    <!--
      | Defining the phases with their appropriate plugins
      ! and versions which will be executed during the 'default'
      ! life cycle.
    -->
    <!--
     | WAR
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>war</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: war-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.0.2:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.6.0:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.0.2:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.6.0:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:2.19.1:test
              </test>
              <package>
                org.apache.maven.plugins:maven-war-plugin:${project.version}:war
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:2.5.2:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: war-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

  </components>
</component-set>
