What is the difference between M2_HOME and MAVEN_HOME

Solution 1:

MAVEN_HOME is for Maven 1, M2_HOME is for Maven 2 and later.

Maven 2 was a complete rewrite from Maven 1 and was not backwards compatible. Having the two different _HOME variables means it is possible to run both on the same machine.

UPDATE

As of maven 3.5.0 neither of these environment variables should be specified. Instead, the path should be updated to include the mvn executable.

Solution 2:

And, ironically, you must still use M2_HOME and M2 for Maven version 3. Otherwise, it fails, because they didn't follow this logical approach with Maven V3.x for some bizarre reason.

Consequently, it is not easy to support Maven 2 & Maven 3 on the same machine without rewriting your configuration.