<?xml version="1.0"?>
<!--
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.
-->
<document>
  <properties>
    <title>Building</title>
    <author email="dev@commons.apache.org">Commons Documentation Team</author>
  </properties>
  <body>
    <!-- ================================================== -->
    <section name="Overview">
      <p>
        Commons BeanUtils can be built using
        <a href="http://maven.apache.org">Maven 3</a>
        (Recommended: Maven 3.3)
        and JDK 6 / OpenJDK 6 or later (recommended: JDK 8).
      </p>
      <p>
        Further details can be found in the
        <a href="http://commons.apache.org/building.html">commons build instructions</a>.
      </p>
    </section>
    <!-- ================================================== -->
    <section name="Maven 3 Goals">
      <p>
        Build using
        <a href="http://maven.apache.org">Maven 3</a>
        is the preferred build method.
        The compiled BeanUtils JAR should work with Java 6 or later.
      </p>


      <p>
        To build 
        <code>target/commons-beanutils-*.jar</code>
      </p>

      <pre>
        mvn clean package
      </pre>

      <p>
        or to install into your
        <code>~/.m2/repository</code>
      </p>

      <pre>
        mvn clean install
      </pre>


      <p>
        You can skip the unit tests by adding the parameter
        <code>-DskipTests=true</code>
      </p>

      <p>
        To regenerate the web site
        (corresponding to
        https://commons.apache.org/proper/commons-beanutils/)
      </p>

      <pre>
        mvn clean site
      </pre>

      <p>
        Note: the Apache Commons BeanUtils site should include a
        <a href="japicmp.html">japicmp report</a>
        for the
        purpose of checking API version compatibility; to enable this, use Java 7
        or later and run instead:
      </p>

      <pre>
        mvn clean package site -Pjapicmp
      </pre>
    </section>
  </body>
</document>
