<?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.
-->
<!-- 
  For now this is available at http://vm094.oxylos.org/archetype-catalog.xml
  When official this file can be placed at http://directory.apache.org/archetype-catalog.xml
  and added (patch) to 
  http://svn.apache.org/repos/asf/maven/archetype/trunk/archetype-common/src/main/resources/archetype-catalog.xml
 -->
<archetype-catalog>
  <archetypes>
    <archetype>
      <groupId>org.apache.directory.samples</groupId>
      <artifactId>apacheds-archetype-webapp</artifactId>
      <version>1.5.8-SNAPSHOT</version>
      <!-- FIX ME after the first release
      <version>RELEASE</version>
       -->
      <description>Creates ApacheDS as an embedded Web Application</description>
    </archetype>
  </archetypes>
</archetype-catalog>
