<?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="Is there any way to skip the PMD or CPD reports temporarily">
      <question>
        The PMD report takes a long time to generate. Is there any way to skip
        the PMD or CPD reports temporarily?
      </question>
      <answer>
        <p>
          Yes, each report supports a skip parameter which you can pass on the
          command line, <code>-Dpmd.skip=true</code> and
          <code>-Dcpd.skip=true</code> respectively.
        </p>
      </answer>
    </faq>
    <faq id="xref_links">
      <question>
        How can I generate links to the JXR cross-referenced source?
      </question>
      <answer>
        <p>
          First make sure that the <a href="pmd-mojo.html#linkXRef">linkXRef</a> parameter is configured
          correctly (it is switched on by default).
        </p>
        <p>
          Then, the jxr plugin has to run first so that the links can be picked up by the pmd report.
          If you run from the command line, use <code>mvn jxr:jxr pmd:pmd</code>, or if you want the
          reports generated by the site plugin, configure the jxr plugin in your reporting section, see
          <a href="http://maven.apache.org/plugins/maven-jxr-plugin/usage.html">JXR usage</a>.
        </p>
      </answer>
    </faq>
    <faq id="no report in site">
      <question>
        I have add the PMD/CPD reports, but they do not show up in the generated site. Has the plugin been executed?
      </question>
      <answer>
        <p>
          If there are no violations, then by default no reports are created and the entire PMD or CPD section
          is not rendered in the site. To change this behaviour, set the
          <a href="pmd-mojo.xml#skipEmptyReport">skipEmptyReport for PMD</a> or <a href="cpd-mojo#skipEmptyReport">skipEmptyReport for CPD</a>
          to <code>false</code>.
        </p>
      </answer>
    </faq>
  </part>
</faqs>