<!--
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>suppressMarker-configuration</artifactId>
  <packaging>jar</packaging>
  <version>1.0-SNAPSHOT</version>
  <inceptionYear>2006</inceptionYear>
  <name>Maven PMD Plugin SuppressMarker Configuration Test</name>
  <url>http://maven.apache.org</url>
  <build>
    <finalName>default-configuration</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/default-configuration/target/site</outputDirectory>
          <targetDirectory>${basedir}/target/test/unit/default-configuration/target</targetDirectory>
          <format>xml</format>
          <linkXRef>true</linkXRef>
          <xrefLocation>${basedir}/target/test/unit/default-configuration/target/site/xref</xrefLocation>
          <sourceEncoding>UTF-8</sourceEncoding>

          <suppressMarker>SUPPRESSME</suppressMarker>

          <compileSourceRoots>
            <compileSourceRoot>${basedir}/src/test/resources/unit/default-configuration/</compileSourceRoot>
          </compileSourceRoots>
        </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>
