<?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.
-->
<!--
    Tag order follows model description at http://maven.apache.org/ref/3.0.3/maven-model/maven.html
-->
<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.james</groupId>
        <artifactId>james-project</artifactId>
        <version>3.5.0-SNAPSHOT</version>
    </parent>

    <artifactId>james-server</artifactId>
    <packaging>pom</packaging>

    <name>Apache James :: Server</name>
    <description>Apache James Mail Server</description>
    <url>http://james.apache.org/server/</url>
    <inceptionYear>2002</inceptionYear>

    <modules>
        <module>app</module>

        <module>blob</module>

        <module>container/cli</module>
        <module>container/cli-integration</module>
        <module>container/core</module>
        <module>container/filesystem-api</module>
        <module>container/guice</module>
        <module>container/jetty</module>
        <module>container/lifecycle-api</module>
        <module>container/mailbox-adapter</module>
        <module>container/mailbox-jmx</module>
        <module>container/metrics/metrics-es-reporter</module>
        <module>container/spring</module>
        <module>container/util</module>

        <module>data/data-api</module>
        <module>data/data-cassandra</module>
        <module>data/data-file</module>
        <module>data/data-jdbc</module>
        <module>data/data-jmap</module>
        <module>data/data-jmap-cassandra</module>
        <module>data/data-jpa</module>
        <module>data/data-ldap</module>
        <module>data/data-library</module>
        <module>data/data-memory</module>

        <module>dns-service/dnsservice-api</module>
        <module>dns-service/dnsservice-dnsjava</module>
        <module>dns-service/dnsservice-library</module>
        <module>dns-service/dnsservice-test</module>

        <module>mailet/integration-testing</module>

        <module>mailet/dkim</module>
        <module>mailet/mailetcontainer-api</module>
        <module>mailet/mailetcontainer-camel</module>
        <module>mailet/mailets</module>
        <module>mailet/mock-smtp-server</module>

        <module>mailrepository/mailrepository-api</module>
        <module>mailrepository/mailrepository-cassandra</module>
        <module>mailrepository/mailrepository-memory</module>

        <module>protocols/fetchmail</module>
        <module>protocols/jmap-draft</module>
        <module>protocols/jmap-draft-integration-testing</module>
        <module>protocols/jwt</module>
        <module>protocols/protocols-imap4</module>
        <module>protocols/protocols-library</module>
        <module>protocols/protocols-lmtp</module>
        <module>protocols/protocols-managesieve</module>
        <module>protocols/protocols-pop3</module>
        <module>protocols/protocols-smtp</module>
        <module>protocols/webadmin</module>
        <module>protocols/webadmin-integration-test</module>

        <module>queue/queue-activemq</module>
        <module>queue/queue-api</module>
        <module>queue/queue-file</module>
        <module>queue/queue-jms</module>
        <module>queue/queue-memory</module>
        <module>queue/queue-rabbitmq</module>

        <module>task/task-api</module>
        <module>task/task-distributed</module>
        <module>task/task-json</module>
        <module>task/task-memory</module>

        <module>testing</module>
    </modules>

    <properties>
        <productName>Apache-James Mail Server</productName>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence on the Maven build itself.-->
                <plugin>
                    <groupId>org.eclipse.m2e</groupId>
                    <artifactId>lifecycle-mapping</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <lifecycleMappingMetadata>
                            <pluginExecutions>
                                <pluginExecution>
                                    <pluginExecutionFilter>
                                        <groupId>org.ops4j.pax.exam</groupId>
                                        <artifactId>maven-paxexam-plugin</artifactId>
                                        <versionRange>[1.2.4,)</versionRange>
                                        <goals>
                                            <goal>generate-config</goal>
                                            <goal>generate-depends-file</goal>
                                        </goals>
                                    </pluginExecutionFilter>
                                </pluginExecution>
                            </pluginExecutions>
                        </lifecycleMappingMetadata>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
