<?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.
  -->
<archetype-catalog>
    <archetypes>
        <archetype>
            <groupId>org.apache.synapse</groupId>
            <artifactId>synapse-package-archetype</artifactId>
            <version>1.3</version>
            <repository>http://repo1.maven.org/maven2</repository>
            <description>Create a Synapse 1.3 custom package</description>
        </archetype>
        <archetype>
            <groupId>org.apache.synapse</groupId>
            <artifactId>synapse-package-archetype</artifactId>
            <version>2.0.0-SNAPSHOT</version>
            <repository>http://people.apache.org/repo/m2-snapshot-repository</repository>
            <description>Create a Synapse 2.0.0-SNAPSHOT custom package</description>
        </archetype>
    </archetypes>
</archetype-catalog>
