<!--
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>def.configuration</groupId>
  <artifactId>pmd-exclude-roots-config</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2006</inceptionYear>
  <name>Maven PMD Plugin ExcludeRoots Configuration Test</name>
  <url>http://maven.apache.org</url>
  <build>
    <finalName>pmd-exclude-roots-config</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-pmd-plugin</artifactId>
        <configuration>
          <project implementation="org.apache.maven.plugins.pmd.stubs.DefaultConfigurationMavenProjectStub"/>
          <outputDirectory>${basedir}/target/test/unit/exclude-roots/target/site</outputDirectory>
          <targetDirectory>${basedir}/target/test/unit/exclude-roots/target</targetDirectory>
          <localRepository>${localRepository}</localRepository>
          <rulesetsTargetDirectory>${basedir}/target/test/unit/exclude-roots/target/pmd/rulesets</rulesetsTargetDirectory>
          <format>xml</format>
          <inputEncoding>UTF-8</inputEncoding>
          <compileSourceRoots>
            <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/src</compileSourceRoot>
            <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot/src1</compileSourceRoot>
            <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot/src2</compileSourceRoot>
            <compileSourceRoot>${basedir}/src/test/resources/unit/exclude-roots/othersrc</compileSourceRoot>
          </compileSourceRoots>
          <excludeRoots>
            <excludeRoot>${basedir}/src/test/resources/unit/exclude-roots/baseroot</excludeRoot>
            <excludeRoot>${basedir}/src/test/resources/unit/exclude-roots/othersrc</excludeRoot>
          </excludeRoots>
        </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>
