<?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.6.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/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/dkim</module>
        <module>mailet/integration-testing</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</module>
        <module>protocols/jmap-draft</module>
        <module>protocols/jmap-draft-integration-testing</module>
        <module>protocols/jmap-rfc-8621</module>
        <module>protocols/jmap-rfc-8621-integration-tests</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-cli</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>
