Our installation documentation several times requires that JAVA_HOME is set and points to a valid JDK. Though, tens of lines in mvn and mvn.cmd perform some magic to discover it when it is not set. This completely contradicts our requirement that JAVA_HOME must be set.
We can drastically reduce this code by checking if JAVA_HOME is set and use it, if not perform which java and use that to run Maven. Not adhering to our requirements is deemed to undefined behavior. A developer must be able to set this simple env var properly. In most cases on Unix/Linux OpenJDK is installed anyway which means that which java points to a JDK anyway. For instance, the JAVA_HOME discovery on FreeBSD competely fails and sets it to /usr/local because /usr/local/bin/java is actually a wrapper script.