I can't for the life of me figure out why -Xmx in MAVEN_OPTS doesn't work for Maven in openjdk:8-jdk-alpine.
This:
$ docker run --rm openjdk:8-jdk-alpine sh -c 'apk add maven && MAVEN_OPTS=-Xmx2g\ -Xms2g mvn --version'
Produces:
Error occurred during initialization of VM
Initial heap size set to a larger value than the maximum heap size
I've used -XX:+PrintFlagsFinal to look at MaxHeapSize with various settings and here's what I found:
Apparently
-Xmxis fixed to 512mb regardless of what's specified. Other options such as-Xmsand-XX:+PrintFlagsFinalwork as expected:$ docker run --rm openjdk:8-jdk-alpine sh -c 'apk add maven && \ MAVEN_OPTS="-Xmx123m -Xms123m -XX:+PrintFlagsFinal" mvn --version | egrep "(Initial|Max)HeapSize"' uintx InitialHeapSize := 130023424 {product} uintx MaxHeapSize := 536870912 {product}apt add mavenis installing maven version3.6.0-r0but trying with other versions also produce the same result. For example,3.6.1-r0in Alpine 3.10 and3.5.2-r0in Alpine 3.7 produced the same result:$ docker run openjdk:8-jdk-alpine sh -c 'sed -e s:/v3.9/:/v3.10/: /etc/apk/repositories -i && \ apk add maven && MAVEN_OPTS=-Xmx2g\ -XX:+PrintFlagsFinal mvn -version | fgrep MaxHeapSize'I've looked for
~/.m2/settings.xmland./.mvnas mentioned in https://maven.apache.org/configure.html but neither seem to exist:$ docker run --rm openjdk:8-jdk-alpine sh -c 'apk add maven && ls ~/.m2'javaseems to support-Xmxfine:$ docker run --rm openjdk:8-jdk-alpine sh -c 'java -Xmx2g -XX:+PrintFlagsFinal -version | fgrep MaxHeapSize'The problem doesn't occur if
maven:3.6.0-jdk-8-alpineis used instead ofopenjdk:8-jdk-alpine:$ docker run --rm maven:3.6.0-jdk-8-alpine sh -c \ 'MAVEN_OPTS=-Xmx2g\ -XX:+PrintFlagsFinal mvn --version | fgrep MaxHeapSize'Using
_JAVA_OPTIONSinstead ofMAVEN_OPTSworks as a workaround:$ docker run --rm openjdk:8-jdk-alpine sh -c 'apk add maven && \ _JAVA_OPTIONS=-Xmx2g\ -XX:+PrintFlagsFinal mvn --version | fgrep MaxHeapSize'
Question is, how is -Xmx in MAVEN_OPTS being ignored for Maven in openjdk:8-jdk-alpine?