<?xml version="1.0" encoding="UTF-8"?>

<!--
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.
-->

<faqs xmlns="http://maven.apache.org/FML/1.0.1"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/FML/1.0.1 http://maven.apache.org/xsd/fml-1.0.1.xsd"
  id="FAQ" title="Frequently Asked Questions">
  <part id="General">
    <faq id="Where is maven_checks.xml predefined ruleset">
      <question>Where is <code>config/maven_checks.xml</code> predefined ruleset?</question>
      <answer>
        <p>
          Starting with maven-checkstyle-plugin version 2.14, <code>config/maven_checks.xml</code> predefined ruleset
          is not part of the plugin any more but has moved to
          <a href="/shared/maven-shared-resources/">Apache Maven Shared Resources</a>.
        </p>
      </answer>
    </faq>
    <faq id="How are the Checkstyle properties set">
      <question>How are the Checkstyle properties set?</question>
      <answer>
        <p>
          You can set the Checkstyle properties to be used in the plugin configuration of your POM through the
          <code>propertiesLocation</code> parameter. The properties file will be resolved by the plugin based
          on its value.
        </p>
      </answer>
    </faq>
    <faq id="How do I set a custom ruleset">
      <question>How do I set a custom ruleset?</question>
      <answer>
        <p>
          You can set a custom ruleset through the <code>configLocation</code> plugin parameter. If no value is
          specified, the plugin will use a default ruleset, which is the <code>sun_checks.xml</code>, that is bundled with the
          plugin.
        </p>
      </answer>
    </faq>
    <faq id="How do I include the test directory in Checkstyle">
      <question>How do I include the test directory in Checkstyle?</question>
      <answer>
        <p>
          You can include the test directory in the Checkstyle report by setting the
          <code>includeTestSourceDirectory</code> plugin parameter to <code>true</code>.
        </p>
      </answer>
    </faq>
     <faq id="What is the difference between checkstyle:checkstyle and checkstyle:check">
          <question>What is the difference between checkstyle:checkstyle and checkstyle:check?</question>
          <answer>
            <p>
              The checkstyle:checkstyle goal is a <strong>reporting</strong> goal that adds a report
              of Checkstyle violations to the output of the maven-site-plugin. The checkstyle:check goal
              is an ordinary goal that reports violations to the console and/or fails the build when there
              are violations.
            </p>
          </answer>
        </faq>
  </part>
</faqs>
