<?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="What is the difference between the Changelog plugin and the Changes plugin">
      <question>What is the difference between the Changelog plugin and the Changes plugin?</question>
      <answer>
        <p>
        The Changelog plugin generates reports based on the changes in the Software Configuration Management or SCM while
        the Changes plugin generates reports either from a changes.xml file or from the JIRA issue management system.
        For more information about the changes plugin, see
        <a href="http://maven.apache.org/plugins/maven-changes-plugin/">http://maven.apache.org/plugins/maven-changes-plugin</a>
        </p>
      </answer>
    </faq>
    <faq id="What is Software Configuration Management or SCM">
      <question>What is Software Configuration Management or SCM?</question>
      <answer>
        <p>
        According to Roger Pressman (in his book) Software Engineering: A Practitioner's Approach, SCM is a <em>"set of activities
        designed to control change by identifying the work products that are likely to change, establishing relationships among
        them, defining mechanisms for managing different versions of these work products, controlling the changes imposed, and
        auditing and reporting on the changes made."</em>
        </p>
      </answer>
    </faq>
    <faq id="Why do the dates look weird in the report when I use the dateFormat parameter">
      <question>Why do the dates look weird in the report when I use the dateFormat parameter?</question>
      <answer>
        <p>
          The <code>dateFormat</code> parameter is used when parsing the dates
          from the log entries retrieved from your SCM system. It can
          <strong>not</strong> be used to format the dates in the report. If
          you try to do this the parsed dates will be wrong and the dates in
          the report even more so. They can look like this
          <code>0020-05-27</code> for a file that was changed on 14 december
          2005.
        </p>
      </answer>
    </faq>
    <faq id="How can I debug the SCM command">
      <question>How can I debug the SCM command?</question>
      <answer>
        <p>
          When you generate the report, you will see output like this on the
          command line:
<source>
[INFO] [changelog:changelog]
[INFO] Generating changed sets xml to: .../target/changelog.xml
[INFO] Executing: svn --non-interactive log -v -r "{2007-06-13 22:22:09 +0000}:{2007-07-14 22:22:09 +0000}" http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-site-plugin
</source>
          Copy the SCM command (everything after <code>Executing:</code>) and
          try to run it by itself on the command line. If it doesn't work on
          the command line there's probably something wrong with the
          <code>&lt;scm&gt;</code> element in your <code>pom.xml</code>.
        </p>
      </answer>
    </faq>
    <faq id="My changelog report is blank, but it shouldn't be">
      <question>My changelog report is blank, but it shouldn't be</question>
      <answer>
        <p>
          The first thing to check is what data the changelog plugin managed to
          pull out of your SCM system. In the file
          <code>target/changelog.xml</code> you will find that data. Have a
          look and see if the data in the file seems correct. If it is not
          correct, then you are not getting the data you expected from your SCM
          system. Please check your changelog plugin configuration.
        </p>
        <p>
          If that doesn't help, you can try to run the maven-scm-plugin from
          the command line. The maven-changelog-plugin uses Maven SCM under the
          hood and running the maven-scm-plugin is a great way of verifying
          that the <code>&lt;scm&gt;</code> element in your
          <code>pom.xml</code> file is correct. Try this on the command line:
<source>
mvn scm:changelog
</source>
          It should show you the latest changes made in your SCM. It uses the
          default settings, but you can change these by specifying parameters
          on the command line. Read more about this in
          <a href="http://maven.apache.org/scm/plugins/examples/scm-advance-features.html">the scm-plugin documentation</a>.
        </p>
      </answer>
    </faq>
    <faq id="Where can I find a working configuration for this plugin">
      <question>Where can I find a working configuration for this plugin?</question>
      <answer>
        <p>
          The plugin itself is configured to generate a changelog report. This
          is done using the bare minimum of configuration. Have a look at the
          <code>&lt;scm&gt;</code> and
          <code>&lt;reporting&gt;/&lt;plugins&gt;</code> elements in the
          <a href="http://svn.apache.org/repos/asf/maven/plugins/trunk/maven-changelog-plugin/pom.xml">pom.xml</a>
          of this plugin. The generated report is found
          <a href="changelog.html">here</a>.
        </p>
      </answer>
    </faq>
    <faq id="How do I use this plugin with Perforce?">
      <question>How do I use this plugin with Perforce?</question>
      <answer>
        <p>
          You have to specify your <code>clientspec</code> in the
          <code>&lt;systemProperties&gt;</code> element of this plugin's
          &lt;configuration&gt; element.
<source>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changelog-plugin</artifactId>
        <configuration>
          <systemProperties>
            <property>
              <name>maven.scm.perforce.clientspec.name</name>
              <value>your-client-spec-name</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
</source>
        </p>
      </answer>
    </faq>
    <faq id="The Developer Activity report is blank, but the other reports are fine">
      <question>The Developer Activity report is blank, but the other reports are fine</question>
      <answer>
        <p>
          You need to add
          <a href="http://maven.apache.org/ref/current/maven-model/maven.html#class_developer"><code>&lt;developer&gt;</code></a>
          elements in your <code>pom.xml</code> file. Their id:s need to match
          the userid:s that are used in your SCM system. Only checkins made by
          a developer found in the pom will be added to the Developer Activity
          report.
        </p>
      </answer>
    </faq>
    <faq id="I think I've found a bug in this plugin, what do I do">
      <question>I think I've found a bug in this plugin, what do I do?</question>
      <answer>
        <p>
          Please follow these steps in the order they come.
        </p>
        <ol>
          <li>
            Read all the FAQs on this page.
          </li>
          <li>
            Ask a question on the user list. Please supply the necessary
            information so that the people on the list can help you. This
            includes the <code>&lt;scm&gt;</code> element from your
            <code>pom.xml</code>, your plugin configuration plus a rich
            description of what happens and what you expected to happen.
          </li>
          <li>
            Create an issue in <a href="issue-tracking.html">JIRA</a>.
          </li>
        </ol>
      </answer>
    </faq>
    <faq id="Why do the child modules of my multi module project have wrong SCM URLs">
      <question>Why do the child modules of my multi module project have wrong SCM URLs?</question>
      <answer>
        <p>
          The short answer is that they don't. This is usually a
          misunderstanding of how the SCM URLs are inherited.
        </p>
        <p>
          If you only define an &lt;scm&gt; element in the parent POM, the
          child modules will interit a value for their SCM URLs. The path to a
          child directory, when using the aggregator, is <em>not</em> used when
          constructing the SCM URLs. Only the artifactId is used.
        </p>
        <p>
          If you want to examine what your POM looks like, including the SCM
          URLs, you can run this command:
<source>
mvn help:effective-pom
</source>
        </p>
      </answer>
    </faq>
  </part>
</faqs>