<!--

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</groupId>
        <artifactId>apache</artifactId>
        <version>14</version>
    </parent>

    <groupId>org.apache.flex.pmd</groupId>
	<artifactId>flex-pmd</artifactId>
    <version>1.3-SNAPSHOT</version>
	<packaging>pom</packaging>

    <name>Adobe Flex PMD</name>
	<url>http://www.adobe.com/consulting</url>
	<inceptionYear>2008</inceptionYear>
	<description>This project, FlexPMD, is meant to automatically detect code anti-patterns, code smells, 
	common bad practices in a Flash/Flex based source code. Originally, FlexPMD has been created to automate 
	low-level code audits, so that consultants can focus on higher level architectural issues. 
	It ended up to be rather advanced anti-patterns detector.</description>

    <mailingLists>
        <mailingList>
            <name>Apache Flex User List</name>
            <subscribe>users-subscribe@flex.apache.org</subscribe>
            <unsubscribe>users-unsubscribe@flex.apache.org</unsubscribe>
            <post>users@flex.apache.org</post>
            <archive>http://mail-archives.apache.org/mod_mbox/flex-users/</archive>
        </mailingList>
    </mailingLists>

    <scm>
        <connection>scm:svn:https://git-wip-us.apache.org/repos/asf/flex-utilities.git</connection>
        <developerConnection>scm:svn:https://git-wip-us.apache.org/repos/asf/flex-utilities.git</developerConnection>
        <url>https://git-wip-us.apache.org/repos/asf/flex-utilities.git</url>
    </scm>

    <properties>
		<!-- Project properties -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<source.url>http://opensource.adobe.com/svn/opensource/flexpmd</source.url>
		<source.local.path>file:///Users/xagnetti/Work/repositories/opensource.adobe/flexpmd</source.local.path>

		<!-- Plugins/Dependencies version -->
		<pmd.version>4.2.5</pmd.version>
		<compileSource>1.5</compileSource>
		<cobertura.version>2.2</cobertura.version>
		<junit.version>4.7</junit.version>
		<commons-lang.version>2.4</commons-lang.version>
		<findbugs.version>2.1</findbugs.version>
		<checkstyle.version>2.2</checkstyle.version>
		<license.version>1.4.0</license.version>
		<dependency.version>2.0</dependency.version>
		<assembly.version>2.2-beta-2</assembly.version>
		<wagon-svn.version>1.8</wagon-svn.version>
		<maven-antrun-plugin.version>1.7</maven-antrun-plugin.version>
		<plexus-utils.version>1.0.2</plexus-utils.version>
		<release-plugin.version>2.5</release-plugin.version>
		<gpg-plugin.version>1.0-alpha-4</gpg-plugin.version>
		<maven-reporting-impl.version>2.0-beta-3</maven-reporting-impl.version>
		<maven-plugin-api.version>3.2.3</maven-plugin-api.version>
		<maven-plugin-testing-harness.version>1.0-beta-1</maven-plugin-testing-harness.version>
		<ant.version>1.7.0</ant.version>
		<dom4j.version>1.6.1</dom4j.version>
		<javadoc-plugin.version>2.7</javadoc-plugin.version>
        <cairngorm.version>2.2.1</cairngorm.version>

		<jsap.version>2.1</jsap.version>

		<!-- Reporting versions -->
		<maven-pmd-plugin.version>2.4</maven-pmd-plugin.version>

		<!-- Flex project versions -->
		<!-- Plugin versions -->

		<flex-mojos-plugin.version>7.0.1</flex-mojos-plugin.version>
		<ant-run-plugin.version>1.2</ant-run-plugin.version>
		<maven-dependency-plugin.version>2.0</maven-dependency-plugin.version>
	</properties>

	<developers>
		<developer>
			<id>xagnetti</id>
			<name>Xavier Agnetti</name>
			<email>xagnetti [at] adobe.com</email>
			<timezone>+1</timezone>
			<organization>${project.organization.name}</organization>
			<organizationUrl>${project.organization.url}</organizationUrl>
			<roles>
				<role>Architect</role>
				<role>Developer</role>
				<role>Mavenizer</role>
			</roles>
		</developer>
		<developer>
			<id>rbokelberg</id>
			<name>Ralph Bokelberg</name>
			<timezone>0</timezone>
			<roles>
				<role>Parser/Lexer developer</role>
			</roles>
		</developer>
	</developers>

	<contributors>
		<contributor>
			<name>Francois Le Droff</name>
			<email>ledroff [at] adobe.com</email>
			<timezone>+1</timezone>
			<organization>${project.organization.name}</organization>
			<organizationUrl>${project.organization.url}</organizationUrl>
			<roles>
				<role>RuleSet ideas contributor</role>
				<role>Maven advisor</role>
			</roles>
		</contributor>
		<contributor>
			<name>Thomas Sugden</name>
			<email>tsugden [at] adobe.com</email>
			<timezone>0</timezone>
			<organization>${project.organization.name}</organization>
			<organizationUrl>${project.organization.url}</organizationUrl>
			<roles>
				<role>RuleSet ideas contributor</role>
			</roles>
		</contributor>
		<contributor>
			<name>Romain Pelisse</name>
			<timezone>+1</timezone>
			<roles>
				<role>PMD advisor</role>
			</roles>
		</contributor>
	</contributors>

	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>${junit.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.apache.maven</groupId>
                <artifactId>maven-core</artifactId>
                <version>${maven-plugin-api.version}</version>
            </dependency>
            <dependency>
                <groupId>pmd</groupId>
                <artifactId>pmd</artifactId>
                <version>${pmd.version}</version>
                <exclusions>
                    <!-- This lib seems to cause: ArrayIndexOutOfBoundsException: 48188 -->
                    <exclusion>
                        <groupId>com.ibm.icu</groupId>
                        <artifactId>icu4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>${maven-pmd-plugin.version}</version>
                <exclusions>
                    <!-- This lib seems to cause: ArrayIndexOutOfBoundsException: 48188 -->
                    <exclusion>
                        <groupId>com.ibm.icu</groupId>
                        <artifactId>icu4j</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.adobe.cairngorm</groupId>
                <artifactId>cairngorm</artifactId>
                <version>${cairngorm.version}</version>
                <type>swc</type>
                <exclusions>
                    <exclusion>
                        <groupId>com.adobe.flex.framework</groupId>
                        <artifactId>flex-framework</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>com.adobe.cairngorm</groupId>
                <artifactId>event-source</artifactId>
                <version>${event-source.version}</version>
                <type>swc</type>
                <exclusions>
                    <exclusion>
                        <groupId>com.adobe.flex.framework</groupId>
                        <artifactId>flex-framework</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.adobe.flexunit</groupId>
                        <artifactId>flexunit</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.adobe.flexunit</groupId>
                        <artifactId>flexunitoptional</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>info.flex-mojos</groupId>
                        <artifactId>testing-support</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
        </dependencies>
    </dependencyManagement>

	<modules>
		<module>flex-pmd-flex</module>
		<module>flex-pmd-hybrid</module>
		<module>flex-pmd-java</module>
	</modules>

	<build>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-dependency-plugin</artifactId>
					<version>${dependency.version}</version>
				</plugin>
				<plugin>
					<groupId>org.apache.maven.plugins</groupId>
					<artifactId>maven-assembly-plugin</artifactId>
					<version>${assembly.version}</version>
				</plugin>
			</plugins>
		</pluginManagement>

		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-release-plugin</artifactId>
				<version>${release-plugin.version}</version>
				<configuration>
					<tagBase>${source.url}/tags</tagBase>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>${compileSource}</source>
					<target>${compileSource}</target>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>cobertura-maven-plugin</artifactId>
				<version>${cobertura.version}</version>
				<configuration>
					<format>xml</format>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>findbugs-maven-plugin</artifactId>
				<version>${findbugs.version}</version>
				<configuration>
					<xmlOutput>true</xmlOutput>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-checkstyle-plugin</artifactId>
				<version>${checkstyle.version}</version>
				<configuration>
					<configLocation>checkstyle.xml</configLocation>
				</configuration>
			</plugin>

			<!--plugin>
				<groupId>com.google.code.maven-license-plugin</groupId>
				<artifactId>maven-license-plugin</artifactId>
				<version>${license.version}</version>
				<configuration>
					<header>src/etc/header.txt</header>
					<includes>
						<include>**/src/**</include>
						<include>**/test/**</include>
					</includes>
					<excludes>
						<exclude>**/Simple.as</exclude>
						<exclude>**/Empty.*</exclude>
						<exclude>**/Version.as</exclude>
						<exclude>**/FlexPMD60.as</exclude>
						<exclude>**/header.txt</exclude>
						<exclude>**/MainWithNoCopyright.mxml</exclude>
					</excludes>
					<aggregate>true</aggregate>
					<properties>
						<year>${project.inceptionYear}</year>
						<company>${project.organization.name}</company>
					</properties>
					<mapping>
						<mxml>XML_STYLE</mxml>
						<xsl>XML_STYLE</xsl>
						<as>JAVADOC_STYLE</as>
					</mapping>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>check</goal>
						</goals>
					</execution>
				</executions>
			</plugin-->

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>${javadoc-plugin.version}</version>
				<executions>
					<execution>
						<phase>deploy</phase>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>

	<reporting>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-site-plugin</artifactId>
				<version>2.0-beta-5</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-project-info-reports-plugin</artifactId>
				<version>2.1.1</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-report-plugin</artifactId>
				<inherited>true</inherited>
				<version>2.4.3</version>
			</plugin>
			<plugin>
				<artifactId>maven-pmd-plugin</artifactId>
				<version>${maven-pmd-plugin.version}</version>
				<configuration>
					<linkXref>true</linkXref>
					<minimumTokens>100</minimumTokens>
					<targetJdk>${compileSource}</targetJdk>
					<rulesets>
						<ruleset>pmd.xml</ruleset>
					</rulesets>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>javancss-maven-plugin</artifactId>
				<version>2.0-beta-2</version>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-javadoc-plugin</artifactId>
				<version>2.5</version>
			</plugin>
		</plugins>
	</reporting>

	<profiles>
		<profile>
			<id>hudson</id>
			<distributionManagement>
				<repository>
					<id>txi_releases</id>
					<url>http://txici.can.adobe.com:9999/nexus/content/repositories/txi</url>
				</repository>
				<snapshotRepository>
					<id>txi_snapshot</id>
					<url>http://txici.can.adobe.com:9999/nexus/content/repositories/txi_snapshots/</url>
				</snapshotRepository>
			</distributionManagement>
		</profile>
	</profiles>

</project>
