<!--
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>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-checkstyle-plugin</artifactId>
        <configuration>
          <outputDirectory>${basedir}/target/test-harness/checkstyle/no-rules</outputDirectory>
          <enableRulesSummary>false</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/no-rules/checkstyle-cachefile</cacheFile>
          <outputFile>${basedir}/target/test-harness/checkstyle/no-rules/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>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>
