<?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.
-->
<lifecycleMappingMetadata>
    <pluginExecutions>
        <pluginExecution>
            <pluginExecutionFilter>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <versionRange>[1.0.0,)</versionRange>
                <goals>
                    <goal>manifest</goal>
                    <goal>bundle</goal>
                </goals>
            </pluginExecutionFilter>
            <action>
                <configurator>
                    <id>org.apache.sling.ide.eclipse.m2e.bundleconfigurator</id>
                </configurator>
            </action>
        </pluginExecution>
    </pluginExecutions>
  
  <lifecycleMappings>
    <lifecycleMapping>
      <packagingType>content-package</packagingType>
      <lifecycleMappingId>org.apache.sling.ide.eclipse.m2e.contentPackageLifecycleMapping</lifecycleMappingId>
      <pluginExecutions>
        <pluginExecution>
          <pluginExecutionFilter>
            <groupId>com.day.jcr.vault</groupId>
            <artifactId>content-package-maven-plugin</artifactId>
            <versionRange>[0.0.10,2)</versionRange>
            <goals>
              <goal>package</goal>
            </goals>
          </pluginExecutionFilter>
          <action>
            <configurator>
              <id>org.apache.sling.ide.eclipse.m2e.configurator</id>
            </configurator>
          </action>
        </pluginExecution>
           
        <pluginExecution>
          <pluginExecutionFilter>
          
            <groupId>com.day.jcr.vault</groupId>
            <artifactId>content-package-maven-plugin</artifactId>
            <versionRange>[0.0.10,2)</versionRange>
            <goals>
              <goal>install</goal>
            </goals>
          </pluginExecutionFilter>
          <action>
           <ignore>
               <message>content-package-maven-plugin goal "install" is ignored</message>
           </ignore>
          </action>
        </pluginExecution>
      </pluginExecutions>
    </lifecycleMapping>
    
  </lifecycleMappings>    
</lifecycleMappingMetadata>