<?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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache.directory.api</groupId>
    <artifactId>api-ldap-codec-parent</artifactId>
    <version>1.0.0-M17</version>
  </parent>
  
  <artifactId>api-ldap-codec-standalone</artifactId>
  <name>Apache Directory LDAP API Codec Standalone</name>
  <packaging>jar</packaging>
  <description>
    This module was created to fix issue DIRSHARED-91 where the embedded Felix
    instance inside the default LdapCodecService implementation was making it 
    very problematic to deploy the ldap-codec inside an RCP (OSGi) environment
    and hence Apache Directory Studio could not use it.

    This module is most likely temporary and will disappear once we are fully
    OSGi enabled. This module is a plain old jar, not a bundle to avoid 
    accidental reuse as an OSGi module because it contains the version of the
    LdapCodecService that embeds Felix to make controls and extended ops 
    pluggable in the codec.
  </description>

  <dependencies>
    <dependency>
      <groupId>org.apache.directory.junit</groupId>
      <artifactId>junit-addons</artifactId>
      <scope>test</scope>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-net-mina</artifactId>
    </dependency>
    
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>api-ldap-codec-core</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.mina</groupId>
      <artifactId>mina-core</artifactId>
    </dependency>
  </dependencies>
  
</project>
