在docker build中安装maven会用JAVA 7覆盖JAVA 8(!)

Tev*_*vya 6 maven docker dockerfile

看来maven用Java 7覆盖了Java8。请考虑以下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    
Run Code Online (Sandbox Code Playgroud)

第二行将报告Java版本为1.8,而第四行将报告Java版本为1.7。 在两种情况下,/usr/bin/java符号链接都指向/etc/alternatives/java

除了重新安装Java 8(这就是为什么我首先使用Java:8的原因)之外,如何在构建docker映像时撤消安装maven的这些副作用?

Tev*_*vya 6

我找到了一个最小增量解决方案,尽管指出了不使用 apt-get 进行 maven 安装的要点。这是解决方案作为代码

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
Run Code Online (Sandbox Code Playgroud)

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


bma*_*ies 5

您的问题不是Maven,这是将Maven打包为APT的.deb的人做出的愚蠢决定。不要从.deb使用Maven。Apache Maven项目无法实现这些功能,也不知道其中包含什么,也不太支持它们。从maven.apache.org下载真正的tar.gz,它将很高兴地与您拥有的任何Java版本一起使用。