<?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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.apache</groupId>
    <artifactId>apache</artifactId>
    <version>17</version>
  </parent>
  <groupId>org.apache.rat</groupId>
  <artifactId>apache-rat-project</artifactId>
  <version>0.12</version>
  <packaging>pom</packaging>
  <name>Apache Creadur Rat</name>
  <url>http://creadur.apache.org/rat/</url>
  <description>
Apache Rat is a release audit tool. It improves accuracy and efficiency when checking
releases. It is heuristic in nature: making guesses about possible problems. It
will produce false positives and cannot find every possible issue with a release.
Its reports require interpretation.

In response to demands from project quality tool developers, Rat is available as a
library suitable for inclusion in tools. This POM describes that library.
Note that binary compatibility is not guaranteed between 0.x releases.

Apache Rat is developed by the Apache Creadur project, a language and build
agnostic home for software distribution comprehension and audit tools.
  </description>
  <inceptionYear>2006</inceptionYear>
  <prerequisites>
    <!-- This is the version of Maven required to build Rat -->
    <maven>3.0.5</maven>
  </prerequisites>
  <properties>
    <javaVersion>1.5</javaVersion>
    <maven.compiler.source>${javaVersion}</maven.compiler.source>
    <maven.compiler.target>${javaVersion}</maven.compiler.target>
    <!-- This is the version of Maven required to use the Rat Maven Plugin -->
    <mavenVersion>2.2.1</mavenVersion>
    <!--
    Publication to the website is a two phase operation:

     1. Deploy to local stage: mvn site-deploy
     2. Publish to Apache CMS: mvn scm-publish:publish-scm

    This will only work when the origin for scm-publish:publish-scm
    is the target for site:deploy.

    SO MAKE SURE THAT THE FOLLOWING PROPERTIES RESOLVE TO THE SAME
    DIRECTORY:

     * scmpublish.content
     * rat.site.url

    -->
    <rat.LocalSiteStaging>stage</rat.LocalSiteStaging>
    <scmpublish.content>${rat.LocalSiteStaging}</scmpublish.content>
    <rat.site.url>file:${rat.LocalSiteStaging}</rat.site.url>
    <rat.site.name>Apache Rat Website</rat.site.name>
    <rat.site.id>org.apache.rat.site</rat.site.id>
    <creadur.jira.id>RAT</creadur.jira.id>
    <!-- maven plugin versions -->
    <mavenPluginPluginVersion>3.3</mavenPluginPluginVersion>
    <mavenChangesVersion>2.11</mavenChangesVersion>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-api</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-core</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-tasks</artifactId>
        <version>${project.version}</version>
      </dependency>
      <dependency>
        <groupId>commons-cli</groupId>
        <artifactId>commons-cli</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>commons-collections</groupId>
        <artifactId>commons-collections</artifactId>
        <version>3.2.2</version>
      </dependency>
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <!-- Later versions require Java 1.6+ -->
        <version>2.2</version>
      </dependency>
      <dependency>
        <groupId>commons-lang</groupId>
        <artifactId>commons-lang</artifactId>
        <!--  commons-lang3 versions require Java 1.6+ -->
        <version>2.6</version>
      </dependency>
      <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-compress</artifactId>
        <version>1.10</version>
      </dependency>
      <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-all</artifactId>
        <version>1.10.19</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.hamcrest</groupId>
        <artifactId>hamcrest-library</artifactId>
        <version>1.2.1</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant</artifactId>
        <version>1.9.6</version>
        <scope>provided</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-antunit</artifactId>
        <version>1.3</version>
        <scope>test</scope>
      </dependency>
      <dependency>
        <groupId>org.apache.ant</groupId>
        <artifactId>ant-testutil</artifactId>
        <version>1.9.6</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <reporting>
    <!-- N.B. plugins defined here in the <reporting> section ignore what's defined in <pluginManagement>
         in the <build> section above, so we have to define the versions here. -->
    <plugins>
      <!-- org.apache.maven.plugins, alpha order by artifact id -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>${mavenChangesVersion}</version>
        <configuration>
          <xmlPath>${basedir}/src/changes/changes.xml</xmlPath>
          <columnNames>Fix Version,Key,Component,Summary,Type,Resolution,Status</columnNames>
          <!-- Sort cols in natural order when using JQL for JIRA 5.1 -->
          <sortColumnNames>Fix Version DESC,Type,Key DESC</sortColumnNames>
          <resolutionIds>Fixed</resolutionIds>
          <statusIds>Resolved,Closed</statusIds>
          <!-- Don't include sub-task -->
          <typeIds>Bug,New Feature,Task,Improvement,Wish,Test</typeIds>
          <!-- For JIRA >= 5.1 -->
          <useJql>true</useJql>
          <onlyCurrentVersion>${commons.changes.onlyCurrentVersion}</onlyCurrentVersion>
          <maxEntries>${commons.changes.maxEntries}</maxEntries>
          <runOnlyAtExecutionRoot>${commons.changes.runOnlyAtExecutionRoot}</runOnlyAtExecutionRoot>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
              <report>jira-report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-javadoc-plugin</artifactId>
        <version>2.10.3</version>
        <configuration>
          <tags>
            <tag>
              <name>TODO</name>
              <placement>X</placement>
              <head>To do:</head>
            </tag>
          </tags>
          <notimestamp>true</notimestamp>
        </configuration>
        <reportSets>
          <reportSet>
            <id>non-aggregate</id>
            <configuration>
            </configuration>
            <reports>
              <report>javadoc</report>
            </reports>
          </reportSet>
          <reportSet>
            <id>aggregate</id>
            <configuration>
            </configuration>
            <reports>
              <report>aggregate</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
        <version>2.4</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <version>3.1</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-project-info-reports-plugin</artifactId>
        <version>2.7</version>
        <reportSets>
          <reportSet>
            <reports>
              <report>dependencies</report>
              <report>project-team</report>
              <report>mailing-list</report>
              <report>issue-tracking</report>
              <report>cim</report>
              <!-- Do not enable the license report;
                   license links must only point to
                   http://www.apache.org/licenses/
              <report>license</report>
              -->
              <report>scm</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <!-- Must use previous version, to avoid a cyclic reference -->
        <version>0.11</version>
      </plugin>
    </plugins>
  </reporting>
  <build>
    <defaultGoal>clean install</defaultGoal>
    <pluginManagement>
      <!--
        This section is typically used to configure the versions of
        plugins that we use. Note, that we are inheriting from the
        parent POM, so we only have to configure version numbers,
        if ours is different.
      -->
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>
          <dependencies>
            <dependency>
              <groupId>org.apache.ant</groupId>
              <artifactId>ant</artifactId>
              <version>1.9.6</version>
            </dependency>
          </dependencies>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.2</version>
          <configuration>
            <source>${javaVersion}</source>
            <target>${javaVersion}</target>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>2.10.3</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-pmd-plugin</artifactId>
          <!-- Later versions require Java 1.6+ -->
          <version>3.1</version>
          <configuration>
            <targetJdk>${javaVersion}</targetJdk>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.4</version>
          <configuration>
            <relativizeDecorationLinks>false</relativizeDecorationLinks>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-scm-publish-plugin</artifactId>
          <version>1.0</version>
          <extensions>true</extensions>
          <configuration>
            <!-- svn location for publication -->
            <pubScmUrl>scm:svn:https://svn.apache.org/repos/asf/creadur/site/trunk/content/rat/</pubScmUrl>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.1</version>
          <configuration>
            <!-- Only prompt once for the release version -->
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <mavenExecutorId>forked-path</mavenExecutorId>
            <tagNameFormat>@{project.artifactId}-@{project.version}-RC1</tagNameFormat>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.1</version>
          <configuration>
            <tagNameFormat>@{project.artifactId}-@{project.version}-RC2</tagNameFormat>
          </configuration>
        </plugin>
        <!--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.apache.rat</groupId>
        						<artifactId>
        							apache-rat-plugin
        						</artifactId>
        						<versionRange>[0.11,)</versionRange>
        						<goals>
        							<goal>check</goal>
        						</goals>
        					</pluginExecutionFilter>
        					<action>
        						<ignore />
        					</action>
        				</pluginExecution>
        			</pluginExecutions>
        		</lifecycleMappingMetadata>
        	</configuration>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <phase>pre-site</phase>
            <id>copy-site-resources</id>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>
                <copy file="RELEASE_NOTES.txt" todir="${project.build.directory}/site/" failonerror="false" />
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <!-- This checks the bytecode version of the dependencies transitively -->
            <id>enforce-bytecode-version</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <enforceBytecodeVersion>
                  <maxJdkVersion>${javaVersion}</maxJdkVersion>
                </enforceBytecodeVersion>
              </rules>
              <fail>true</fail>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>extra-enforcer-rules</artifactId>
            <version>1.0-beta-2</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>animal-sniffer-maven-plugin</artifactId>
        <version>1.11</version>
        <dependencies>
          <!-- Upgrade ASM and support Java 8 bytecode -->
          <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm-all</artifactId>
            <version>5.0.3</version>
          </dependency>
        </dependencies>
        <executions>
          <execution>
            <!-- This checks the source code of our project -->
            <!--
              Note that this cannot use our ${javaVersion} property, so it must
              be changed manually when we decide to move to a higher version of
              Java
            -->
            <id>check-java-1.5-compat</id>
            <phase>process-classes</phase>
            <goals>
              <goal>check</goal>
            </goals>
            <configuration>
              <signature>
                <groupId>org.codehaus.mojo.signature</groupId>
                <artifactId>java15</artifactId>
                <version>1.0</version>
              </signature>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
    <extensions>
      <extension>
        <groupId>org.apache.maven.wagon</groupId>
        <artifactId>wagon-ssh</artifactId>
        <!-- Last version that is compatible with Maven 2 -->
        <version>1.0-beta-7</version>
      </extension>
    </extensions>
  </build>
  <issueManagement>
    <system>JIRA</system>
    <url>https://issues.apache.org/jira/browse/RAT</url>
  </issueManagement>
  <ciManagement>
    <system>Buildbot</system>
    <url>http://ci.apache.org/builders/rat_trunk</url>
    <!--  Jenkins builds are at:
    https://builds.apache.org/job/Creadur-Rat-ParentPom/ - build the parent pom for all RAT submodules
    https://builds.apache.org/job/Creadur-Rat/ - check Java5 compliance and run all tests
    https://builds.apache.org/job/Creadur-Rat-Site/ - generate mvn site
    https://builds.apache.org/job/Creadur-Rat-Latest-Jdk/ - run with Java8 and mvn3 latest
    https://builds.apache.org/job/Creadur-Rat-Site-Latest-Jdk/ - ensure that a site can be generated with mvn3 and Java8
     -->
  </ciManagement>
  <mailingLists>
    <mailingList>
      <name>Rat Development (Apache Creadur project)</name>
      <subscribe>dev-subscribe@creadur.apache.org</subscribe>
      <unsubscribe>dev-unsubscribe@creadur.apache.org</unsubscribe>
      <post>dev@creadur.apache.org</post>
      <archive>http://mail-archives.apache.org/mod_mbox/creadur-dev/</archive>
    </mailingList>
    <mailingList>
      <name>Rat Commits (Apache Creadur project)</name>
      <subscribe>commits-subscribe@creadur.apache.org</subscribe>
      <unsubscribe>commits-unsubscribe@creadur.apache.org</unsubscribe>
      <archive>http://mail-archives.apache.org/mod_mbox/creadur-commits/</archive>
    </mailingList>
  </mailingLists>
  <developers>
    <developer>
      <id>bodewig</id>
      <name>Stefan Bodewig</name>
      <email>bodewig@apache.org</email>
    </developer>
    <developer>
      <id>rdonkin</id>
      <name>Robert Burrell Donkin</name>
      <email>rdonkin@apache.org</email>
    </developer>
    <developer>
      <id>jochen</id>
      <name>Jochen Wiedmann</name>
      <email>jochen@apache.org</email>
    </developer>
    <developer>
      <id>gmcdonald</id>
      <name>Gavin</name>
      <email>gmcdonald@apache.org</email>
    </developer>
    <developer>
      <id>brianf</id>
      <name>Brian Fox</name>
      <email>brianf@apache.org</email>
    </developer>
    <developer>
      <id>dennisl</id>
      <name>Dennis Lundberg</name>
      <email>dennisl@apache.org</email>
    </developer>
    <developer>
      <id>rgardler</id>
      <name>Ross Gardler</name>
      <email>rgardler@apache.org</email>
    </developer>
    <developer>
      <id>crossley</id>
      <name>David Crossley</name>
      <email>crossley@apache.org</email>
    </developer>
    <developer>
      <id>dblevins</id>
      <name>David Blevins</name>
      <email>dblevins@apache.org</email>
    </developer>
    <developer>
      <id>pottlinger</id>
      <name>Philipp Ottlinger</name>
      <email>pottlinger@apache.org</email>
    </developer>
  </developers>
  <contributors>
    <contributor>
      <name>Jukka Zitting</name>
      <email>jukka@apache.org</email>
    </contributor>
    <contributor>
      <name>Todd Volkert</name>
      <email>tvolkert+apache@gmail.com</email>
    </contributor>
    <contributor>
      <name>Henri Yandell</name>
      <email>bayard@apache.org</email>
    </contributor>
    <contributor>
      <name>Guillaume Nodet</name>
      <email>gnodet@apache.org</email>
    </contributor>
    <contributor>
      <name>Karl Pauls</name>
      <email>pauls@apache.org</email>
    </contributor>
    <contributor>
      <name>Matthieu Riou</name>
      <email>mriou@apache.org</email>
    </contributor>
    <contributor>
      <name>Garrett Rooney</name>
      <email>rooneg@apache.org</email>
    </contributor>
    <contributor>
      <name>Paul Merlin</name>
      <email>paulmerlin@apache.org</email>
    </contributor>
  </contributors>
  <scm>
    <connection>scm:svn:http://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC2</connection>
    <developerConnection>scm:svn:https://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC2</developerConnection>
    <url>http://svn.apache.org/repos/asf/creadur/rat/tags/apache-rat-project-0.12-RC2</url>
  </scm>
  <distributionManagement>
    <site>
      <id>${rat.site.id}</id>
      <name>${rat.site.name}</name>
      <url>${rat.site.url}</url>
    </site>
  </distributionManagement>
  <modules>
    <module>apache-rat-api</module>
    <module>apache-rat-core</module>
    <module>apache-rat-plugin</module>
    <module>apache-rat-tasks</module>
    <module>apache-rat</module>
  </modules>
  <licenses>
    <license>
      <name>Apache License, Version 2</name>
      <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
      <distribution>repo</distribution>
      <comments>An OSI approved open source license.</comments>
    </license>
  </licenses>
  <organization>
    <name>Apache Software Foundation</name>
    <url>http://www.apache.org</url>
  </organization>
  <profiles>
    <profile>
      <id>apache-release</id>
      <build>
        <plugins>
          <!-- Skip the source-release artifact here; we create it under the CLI module -->
          <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              <execution>
                <id>source-release-assembly</id>
                <phase>package</phase>
                <goals>
                  <goal>single</goal>
                </goals>
                <configuration>
                  <skipAssembly>true</skipAssembly>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
    <profile>
      <!--
          Generate release notes in top-level directory from src/changes/changes.xml
          Usage:
          mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn]

          Defining changes.version allows one to create the RN without first removing the SNAPSHOT suffix.

          Requires file src/changes/release-notes.vm.
       -->
      <id>release-notes</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-changes-plugin</artifactId>
            <version>${mavenChangesVersion}</version>
            <configuration>
              <template>release-notes.vm</template>
              <templateDirectory>src/changes</templateDirectory>
              <runOnlyAtExecutionRoot>true</runOnlyAtExecutionRoot>
              <announcementDirectory>.</announcementDirectory>
              <announcementFile>RELEASE-NOTES.txt</announcementFile>
              <announceParameters>
                <releaseVersion>${mavenChangesVersion}</releaseVersion>
              </announceParameters>
            </configuration>
            <executions>
              <execution>
                <id>create-release-notes</id>
                <phase>generate-resources</phase>
                <goals>
                  <goal>announcement-generate</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
