<?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-kerberos-codec</artifactId>
  <name>ApacheDS Protocol Kerberos Codec</name>
  <packaging>bundle</packaging>

  <description>The Kerberos protocol encoder/decoder module</description>

  <dependencies>
    <dependency>
      <groupId>${project.groupId}</groupId>
      <artifactId>apacheds-i18n</artifactId>
    </dependency>
            
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-asn1-api</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-asn1-ber</artifactId>
    </dependency>
        
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-i18n</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-ldap-model</artifactId>
    </dependency>
    
    <dependency>
      <groupId>org.apache.directory.api</groupId>
      <artifactId>api-util</artifactId>
    </dependency>
    
    <dependency>
      <groupId>com.github.ben-manes.caffeine</groupId>
      <artifactId>caffeine</artifactId>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
              <goal>jar-no-fork</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      
      <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}.kerberos.codec</Bundle-SymbolicName>
            <Export-Package>
                org.apache.directory.shared.kerberos;version=${project.version},
                org.apache.directory.shared.kerberos.codec;version=${project.version},
                org.apache.directory.shared.kerberos.codec.changePwdData;version=${project.version},
                org.apache.directory.shared.kerberos.codec.options;version=${project.version},
                org.apache.directory.shared.kerberos.codec.types;version=${project.version},
                org.apache.directory.shared.kerberos.components;version=${project.version},
                org.apache.directory.shared.kerberos.crypto.checksum;version=${project.version},
                org.apache.directory.shared.kerberos.exceptions;version=${project.version},
                org.apache.directory.shared.kerberos.flags;version=${project.version},
                org.apache.directory.shared.kerberos.messages;version=${project.version},
                org.apache.directory.server.kerberos.shared.crypto.checksum;version=${project.version},
                org.apache.directory.server.kerberos.shared.crypto.encryption;version=${project.version},
                org.apache.directory.server.kerberos.shared.keytab;version=${project.version},
                org.apache.directory.server.kerberos.shared.replay;version=${project.version},
                org.apache.directory.server.kerberos.shared.store;version=${project.version}
            </Export-Package>
            <Import-Package>
                javax.crypto,
                javax.crypto.spec,
                javax.security.auth.kerberos,
                com.github.benmanes.caffeine.cache;bundle-version=${caffeine.version},
                org.apache.directory.api.asn1;version=${org.apache.directory.api.version},
                org.apache.directory.api.asn1.actions;version=${org.apache.directory.api.version},
                org.apache.directory.api.asn1.ber;version=${org.apache.directory.api.version},
                org.apache.directory.api.asn1.ber.grammar;version=${org.apache.directory.api.version},
                org.apache.directory.api.asn1.ber.tlv;version=${org.apache.directory.api.version},
                org.apache.directory.api.asn1.util;version=${org.apache.directory.api.version},
                org.apache.directory.api.i18n;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.constants;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.entry;version=${org.apache.directory.api.version},
                org.apache.directory.api.ldap.model.exception;version=${org.apache.directory.api.version},
                org.apache.directory.api.util;version=${org.apache.directory.api.version},
                org.apache.directory.server.i18n;version=${project.version},
                org.slf4j;version=${slf4j.api.bundleversion}
            </Import-Package>
          </instructions>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

