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

<!--

Mappings to default lifecycle, specific for each packaging.

-->

<component-set>
  <components>
    <!--
     | POM
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>pom</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: pom-lifecycle -->
            <phases>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: pom-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | JAR
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>jar</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: jar-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test
              </test>
              <package>
                org.apache.maven.plugins:maven-jar-plugin:3.2.0:jar
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: jar-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | EJB
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>ejb</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: ejb-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test
              </test>
              <package>
                org.apache.maven.plugins:maven-ejb-plugin:3.1.0:ejb
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: ejb-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | MAVEN PLUGIN
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>maven-plugin</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: maven-plugin-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
              </compile>
              <process-classes>
                org.apache.maven.plugins:maven-plugin-plugin:3.6.0:descriptor
              </process-classes>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test
              </test>
              <package>
                org.apache.maven.plugins:maven-jar-plugin:3.2.0:jar,
                org.apache.maven.plugins:maven-plugin-plugin:3.6.0:addPluginArtifactMetadata
              </package>
              <!-- MNG-6556: Do not upgrade to 3.0.0-M1 is does not install the plugin prefix metadata -->
              <install>
                org.apache.maven.plugins:maven-install-plugin:2.5.2:install
              </install>
              <!-- MNG-6556: Do not upgrade to 3.0.0-M1 is does not deploy the plugin prefix metadata -->
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:2.8.2:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: maven-plugin-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | 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.2.0:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test
              </test>
              <package>
                org.apache.maven.plugins:maven-war-plugin:3.3.1:war
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: war-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | EAR
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>ear</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: ear-lifecycle -->
            <phases>
              <generate-resources>
                org.apache.maven.plugins:maven-ear-plugin:3.1.2:generate-application-xml
              </generate-resources>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
              </process-resources>
              <package>
                org.apache.maven.plugins:maven-ear-plugin:3.1.2:ear
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: ear-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

    <!--
     | RAR
     |-->
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>rar</role-hint>
      <implementation>org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping</implementation>
      <configuration>
        <lifecycles>
          <lifecycle>
            <id>default</id>
            <!-- START SNIPPET: rar-lifecycle -->
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
              </compile>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:3.2.0:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:3.8.1:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:3.0.0-M5:test
              </test>
              <package>
                org.apache.maven.plugins:maven-rar-plugin:2.4:rar
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:3.0.0-M1:install
              </install>
              <deploy>
                org.apache.maven.plugins:maven-deploy-plugin:3.0.0-M1:deploy
              </deploy>
            </phases>
            <!-- END SNIPPET: rar-lifecycle -->
          </lifecycle>
        </lifecycles>
      </configuration>
    </component>

  </components>
</component-set>
