<!--
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>
  <modelVersion>4.0.0</modelVersion>
  <groupId>custom.configuration</groupId>
  <artifactId>custom-configuration</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2006</inceptionYear>
  <name>Maven PMD Plugin Custom Configuration Test</name>
  <url>http://maven.apache.org</url>
  <build>
    <finalName>custom-configuration</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <project implementation="org.apache.maven.plugins.pmd.stubs.CustomConfigurationMavenProjectStub"/>
          <outputDirectory>${basedir}/target/test/unit/custom-configuration/target/site</outputDirectory>
          <targetDirectory>${basedir}/target/test/unit/custom-configuration/target</targetDirectory>
          <rulesetsTargetDirectory>${basedir}/target/test/unit/custom-configuration/target/pmd/rulesets</rulesetsTargetDirectory>
          <format>csv</format>
          <linkXRef>true</linkXRef>
          <xrefLocation>${basedir}/target/test/unit/custom-configuration/target/site/xref</xrefLocation>
          <sourceEncoding>ISO-8859-1</sourceEncoding>
          <rulesets>
            <ruleset>rulesets/java/maven-pmd-plugin-default.xml</ruleset>
            <ruleset>${basedir}/src/test/resources/unit/custom-configuration/resources/rulesets/custom.xml</ruleset>
          </rulesets>
          <targetJdk>1.4</targetJdk>
          <minimumPriority>4</minimumPriority>          
          <excludes>
            <exclude>**/Sample.java</exclude>
            <exclude>**/AnotherSample.java</exclude>
          </excludes>
          <compileSourceRoots>
            <compileSourceRoot>${basedir}/src/test/resources/unit/custom-configuration/</compileSourceRoot>
          </compileSourceRoots>
          <sourceEncoding>UTF-8</sourceEncoding>
        </configuration>
        <dependencies>
          <dependency>
            <groupId>pmd</groupId>
            <artifactId>pmd</artifactId>
            <version>3.6</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jxr-plugin</artifactId>
      </plugin>
    </plugins>
  </reporting>
</project>
