<!--
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/multi</outputDirectory>
          <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/multi/checkstyle-cachefile</cacheFile>
          <outputFile>${basedir}/target/test-harness/checkstyle/multi/checkstyle-result.xml</outputFile>
          <outputFileFormat>xml</outputFileFormat>
          <failsOnError>false</failsOnError>
          <project implementation="org.apache.maven.plugins.checkstyle.stubs.MultiMavenProjectStub"/>
          <reactorProjects>
            <project implementation="org.apache.maven.plugins.checkstyle.stubs.ModuleMavenProjectStub" />
          </reactorProjects>
          <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>
