<?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.james</groupId>
        <artifactId>james-project</artifactId>
        <version>3.3.0</version>
    </parent>

    <artifactId>apache-mailet</artifactId>
    <packaging>pom</packaging>

    <name>Apache James :: Mailets parent and aggregator</name>
    <description>Apache James Mailets parent and aggregator</description>
    <url>http://james.apache.org/mailet/</url>
    <inceptionYear>2008</inceptionYear>

    <mailingLists>
        <mailingList>
            <name>Apache Mailet API List</name>
            <subscribe>mailet-api-subscribe@james.apache.org</subscribe>
            <unsubscribe>mailet-api-unsubscribe@james.apache.org</unsubscribe>
            <post>mailet-api-@james.apache.org</post>
            <archive>http://mail-archives.apache.org/mod_mbox/james-mailet-api/</archive>
        </mailingList>
    </mailingLists>

    <modules>
        <module>ai</module>
        <module>api</module>
        <module>base</module>
        <module>crypto</module>
        <module>icalendar</module>
        <module>mailetdocs-maven-plugin</module>
        <module>standard</module>
        <module>test</module>
    </modules>

    <issueManagement>
        <url>http://issues.apache.org/jira/browse/MAILET</url>
    </issueManagement>

    <properties>
        <!-- Override the source descriptor -->
        <sourceReleaseAssemblyDescriptor>project</sourceReleaseAssemblyDescriptor>
    </properties>

    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>${james.groupId}</groupId>
                    <artifactId>maven-mailetdocs-plugin</artifactId>
                    <version>${plugin.mailetdocs.version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <extensions>true</extensions>
            </plugin>
            <plugin>
                <groupId>org.apache.rat</groupId>
                <artifactId>apache-rat-plugin</artifactId>
                <inherited>true</inherited>
                <executions>
                    <execution>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>verify</phase>
                        <configuration>
                            <excludes>
                                <exclude>NOTICE.*</exclude>
                                <exclude>LICENSE.*</exclude>
                                <!-- Generated by Maven -->
                                <exclude>release.properties</exclude>
                                <exclude>dist/**/*</exclude>
                                <!-- Eclipse -->
                                <exclude>**/.*</exclude>
                                <exclude>.*/**/*</exclude>
                                <exclude>**/.*/**/*</exclude>
                                <exclude>**/LICENSE*</exclude>
                                <exclude>**/target/**</exclude>
                                <exclude>**/*.iml</exclude>
                                <exclude>**/*.ics</exclude>
                                <exclude>**/*.mime</exclude>
                                <exclude>**/*.eml</exclude>
                                <exclude>src/site/**</exclude>
                            </excludes>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <!-- Add NOTICE and LICENSE to generated JAR -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <resourceBundles>
                                <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
                            </resourceBundles>
                            <properties>
                                <!-- <preProjectText>PRE PROCESS TEXT</preProjectText> -->
                                <postProjectText>This file is automatically generated by dependencies declared in
                                    pom.xml</postProjectText>
                                <addLicense>true</addLicense>
                            </properties>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>versions-maven-plugin</artifactId>
                <reportSets>
                    <reportSet>
                        <reports>
                            <report>dependency-updates-report</report>
                            <report>plugin-updates-report</report>
                            <report>property-updates-report</report>
                        </reports>
                    </reportSet>
                </reportSets>
            </plugin>
        </plugins>
    </reporting>

</project>
