<!--
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>test</groupId>
  <artifactId>test</artifactId>
  <version>1.0-SNAPSHOT</version>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <outputDirectory>${basedir}/target/test-harness/checkstyle/min</outputDirectory>
          <localRepository>${localRepository}</localRepository>
          <enableRulesSummary>true</enableRulesSummary>
          <enableSeveritySummary>true</enableSeveritySummary>
          <enableFilesSummary>true</enableFilesSummary>
          <enableRSS>true</enableRSS>
          <includes>**/*.java</includes>
          <configLocation>sun_checks.xml</configLocation>
          <headerLocation>${basedir}/src/test/test-sources/LICENSE.txt</headerLocation>
          <cacheFile>${basedir}/target/test-harness/checkstyle/min/checkstyle-cachefile</cacheFile>
          <outputFile>${basedir}/target/test-harness/checkstyle/min/checkstyle-result.xml</outputFile>
          <outputFileFormat>xml</outputFileFormat>
          <failsOnError>false</failsOnError>
          <sourceDirectories>
            <sourceDirectory>${basedir}/src/test/test-sources</sourceDirectory>
          </sourceDirectories>
          <project implementation="org.apache.maven.plugins.checkstyle.stubs.MinMavenProjectStub"/>
          <consoleOutput>false</consoleOutput>
          <linkXRef>true</linkXRef>
          <xrefLocation>${basedir}/target/site/xref</xrefLocation>
          <xrefTestLocation>${basedir}/target/site/xref-test</xrefTestLocation>
          <inputEncoding>UTF-8</inputEncoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
