<?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>
        <artifactId>protocols</artifactId>
        <groupId>org.apache.james</groupId>
        <version>3.0.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <groupId>org.apache.james.protocols</groupId>
    <artifactId>protocols-lmtp</artifactId>
    <packaging>bundle</packaging>

    <name>Apache James :: Protocols :: LMTP</name>

    <dependencies>
        <dependency>
            <groupId>org.apache.james.protocols</groupId>
            <artifactId>protocols-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.james.protocols</groupId>
            <artifactId>protocols-smtp</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.james.protocols</groupId>
            <artifactId>protocols-netty</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.james.protocols</groupId>
            <artifactId>protocols-api</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.james.protocols</groupId>
            <artifactId>protocols-smtp</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <version>${assertj-1.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>