<?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.2.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-hbase</module>
        <module>data/data-jcr</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-ldap-integration-testing</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/mailetcontainer-api</module>
        <module>mailet/mailetcontainer-camel</module>
        <module>mailet/mailets</module>

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

        <module>protocols/fetchmail</module>
        <module>protocols/jmap</module>
        <module>protocols/jmap-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-integration-test</module>
        <module>protocols/webadmin</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</module>
        <module>testing</module>
    </modules>

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

    <repositories>
        <!-- apache.snapshot is needed for james-project SNAPSHOT, see JAMES-1470 -->
        <repository>
            <releases>
                <enabled>false</enabled>
            </releases>
            <id>apache.snapshots</id>
            <name>Apache Snapshot Repository</name>
            <url>http://repository.apache.org/snapshots</url>
        </repository>
    </repositories>

    <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>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <artifactId>maven-release-plugin</artifactId>
                <configuration>
                    <!-- During release:perform, enable the "release" profile -->
                    <releaseProfiles>with-assembly</releaseProfiles>
                    <goals>deploy assembly:single</goals>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
