The code requires at least Java 1.6 to build.

However, Maven 3.3.1+ require Java 7

If you want to build and test the code using Java 1.6, use the profile -Pjava-1.6, e.g.

$ mvn clean test -Pjava-1.6

For setting up your Maven installation to enable the use of the profile, please see:

http://commons.apache.org/commons-parent-pom.html#Testing_with_different_Java_versions

The latest version of Maven that runs under Java 1.6 is 3.2.5 [1]

Building the site will also generally require at least Java 7 to run Maven.
In particular, the Checkstyle plugin requires Java 7.

To build the site from scratch, you can use:

$ mvn clean site [-Pjava-1.6]

Also, ensure Maven has enough memory when using Java 7:

$ export MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m" # Unix
C:> set MAVEN_OPTS="-Xmx512m -XX:MaxPermSize=128m"    # Windows

For Java 8+, the MaxPermSize option should be removed:

$ export MAVEN_OPTS="-Xmx512m" # Unix
C:> set MAVEN_OPTS="-Xmx512m"    # Windows

To install the component locally:

$ mvn install

To deploy:

$ mvn deploy -Prelease -Duser.name=*ASF ID* -Pjava-1.6 [-Ptest-deploy]

The test-deploy profile deploys to target/deploy rather than Nexus

[1] http://maven.apache.org/docs/history.html