 ------
 Alternate Location for the changes.xml File
 ------
 Dennis Lundberg
 ------
 15 July 2006
 ------

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

 ~~ NOTE: For help with the syntax of this file, see:
 ~~ http://maven.apache.org/doxia/references/apt-format.html


Alternate Location for the <<<changes.xml>>> File

 <<Note:>> This feature was introduced in version <2.0-beta-2> of the Changes
 plugin.

 <<Note:>> Unless you have a specific reason to have your <<<changes.xml>>>
 file in a different location, we advice you to put it in the default location
 <<<$\{basedir\}/src/changes/changes.xml>>>. If nothing else, it saves you from
 having to configure it.

 If you <really> want to have your <<<changes.xml>>> in another location than
 the default location, you can do this by configuring your <<<pom.xml>>>. In
 this example we want to use the file <<<$\{basedir\}/src/site/changes.xml>>>:

+-----------------+
<project>
  ...
  <reporting>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-changes-plugin</artifactId>
        <version>${project.version}</version>
        <configuration>
          <xmlPath>${basedir}/src/site/changes.xml</xmlPath>
        </configuration>
        <reportSets>
          <reportSet>
            <reports>
              <report>changes-report</report>
            </reports>
          </reportSet>
        </reportSets>
      </plugin>
    </plugins>
  </reporting>
  ...
</project>
+-----------------+
