<?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.server</groupId>
    <artifactId>apacheds-parent</artifactId>
    <version>2.0.0.AM27-SNAPSHOT</version>
  </parent>
  
  <artifactId>apacheds-protocol-dhcp</artifactId>
  <name>ApacheDS Protocol Dhcp</name>
  <packaging>bundle</packaging>

  <description>The DHCP protocol provider for ApacheDS</description>

  <dependencies>

    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-model</artifactId>
    </dependency>

    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-i18n</artifactId>
    </dependency>

    <dependency>
      <groupId>org.apache.mina</groupId>
      <artifactId>mina-core</artifactId>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <archive>
            <manifestFile>META-INF/MANIFEST.MF</manifestFile>
            <addMavenDescriptor>false</addMavenDescriptor>
          </archive>
        </configuration>
      </plugin>
    
      <plugin>
        <groupId>org.apache.felix</groupId>
        <artifactId>maven-bundle-plugin</artifactId>
        <inherited>true</inherited>
        <extensions>true</extensions>
        <configuration>
          <manifestLocation>META-INF</manifestLocation>
          <instructions>
            <Bundle-SymbolicName>${project.groupId}.protocol.dhcp</Bundle-SymbolicName>
            <Export-Package>
                org.apache.directory.server.dhcp;version=${project.version},
                org.apache.directory.server.dhcp.io;version=${project.version},
                org.apache.directory.server.dhcp.messages;version=${project.version},
                org.apache.directory.server.dhcp.options;version=${project.version},
                org.apache.directory.server.dhcp.options.dhcp;version=${project.version},
                org.apache.directory.server.dhcp.options.linklayer;version=${project.version},
                org.apache.directory.server.dhcp.option.miscs;version=${project.version},
                org.apache.directory.server.dhcp.options.perhost;version=${project.version},
                org.apache.directory.server.dhcp.options.perinterface;version=${project.version},
                org.apache.directory.server.dhcp.options.tcp;version=${project.version},
                org.apache.directory.server.dhcp.options.vendor;version=${project.version},
                org.apache.directory.server.dhcp.protocol;version=${project.version},
                org.apache.directory.server.dhcp.service;version=${project.version},
                org.apache.directory.server.dhcp.store;version=${project.version},
            </Export-Package>
            <Import-Package>
                javax.naming,
                javax.naming.directory,
                org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                org.apache.directory.server.i18n;version=${project.version},
                org.apache.mina.core.buffer;version=${mina.core.version},
                org.apache.mina.core.service;version=${mina.core.version},
                org.apache.mina.core.session;version=${mina.core.version},
                org.apache.mina.filter.codec;version=${mina.core.version},
                org.slf4j;version=${slf4j.api.bundleversion}
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
