在Docker版本中安装Maven将使用JAVA 7(!)重写JAVA 8

看来,Maven用Java 7覆盖了Java 8.请考虑以下Dockerfile:

FROM java:8 RUN java -version && ls -l /usr/bin/java RUN apt-get update -y && apt-get install maven -y RUN java -version && ls -l /usr/bin/java 

第二行会报java版本是1.8 但是第四行会报java版本是1.7。 在这两种情况下, /usr/bin/java符号链接指向/etc/alternatives/java

除了重新安装Java 8(这就是为什么我首先使用Java:8的原因),如何在构buildDocker镜像时取消安装Maven的这些副作用?

你的问题不是Maven,这是由将Maven打包成APT的.deb的人做出的一个愚蠢的决定。 不要使用.deb中的Maven。 Apache Maven项目并没有做到这些,不知道它们是什么,并且不太支持它们。 从maven.apache.org下载真正的tar.gz,它将很高兴地使用任何版本的Java。

我发现一个最小三angular洲的解决scheme,虽然有关不使用apt-get的安装点的注意。 这里是解决scheme的代码

 FROM java:8 # preserve Java 8 from the maven install. RUN mv /etc/alternatives/java /etc/alternatives/java8 RUN apt-get update -y && apt-get install maven -y # Restore Java 8 RUN mv -f /etc/alternatives/java8 /etc/alternatives/java RUN ls -l /usr/bin/java && java -version 

显然,最后一行是不必要的,但是确认结果是java 8。