<!--
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>
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>asp</role-hint>
      <implementation>
        org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
      </implementation>
      <configuration>
        <phases>
          <validate>
            npanday.plugin:maven-compile-plugin:initialize,
            npanday.plugin:maven-resolver-plugin:resolve,
            npanday.plugin:NPanday.Plugin.Settings.JavaBinding:generate-settings
          </validate>
          <generate-sources>            
          </generate-sources>
          <process-sources>
            npanday.plugin:maven-aspx-plugin:copy-dependency
          </process-sources>
          <process-resources>
          </process-resources>
          <compile>
            npanday.plugin:maven-aspx-plugin:compile
          </compile>
          <test-compile>          
          </test-compile>
          <test></test>
          <package>
            npanday.plugin:maven-aspx-plugin:package
          </package>
          <install>
            org.apache.maven.plugins:maven-install-plugin:install
          </install>          
          <deploy>
            org.apache.maven.plugins:maven-deploy-plugin:deploy
          </deploy>
        </phases>
      </configuration>
    </component>
    <component>
      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
      <role-hint>asp</role-hint>
      <implementation>org.apache.maven.artifact.handler.DefaultArtifactHandler</implementation>
      <configuration>
        <extension>zip</extension>
        <type>asp</type>
      </configuration>
    </component>
  </components>
</component-set>
