在 docker 构建中安装 Maven 会用 JAVA 7(!) 覆盖 JAVA 8
Installing maven in a docker build overrides JAVA 8 with JAVA 7(!)
看来 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 但第 4 行将报告 java 版本为 1.7。 在这两种情况下 /usr/bin/java
符号链接指向 /etc/alternatives/java
除了重新安装 Java 8(这就是为什么我首先从 Java:8 开始),我如何才能在构建 [=30] 时消除安装 maven 的这些副作用=] 图片?
你的问题不是 Maven,而是将 Maven 打包成 .deb 文件以供 APT 使用的人做出的一些愚蠢决定。不要使用 .deb 中的 Maven。 Apache Maven 项目不做这些,不知道里面有什么,也不太支持它们。从 maven.apache.org 下载正版 tar.gz,它可以与您拥有的任何版本的 Java 一起愉快地工作。
我找到了一个最小增量解决方案,尽管关于不使用 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
显然,最后一行是不必要的,但确认结果是 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 但第 4 行将报告 java 版本为 1.7。 在这两种情况下 /usr/bin/java
符号链接指向 /etc/alternatives/java
除了重新安装 Java 8(这就是为什么我首先从 Java:8 开始),我如何才能在构建 [=30] 时消除安装 maven 的这些副作用=] 图片?
你的问题不是 Maven,而是将 Maven 打包成 .deb 文件以供 APT 使用的人做出的一些愚蠢决定。不要使用 .deb 中的 Maven。 Apache Maven 项目不做这些,不知道里面有什么,也不太支持它们。从 maven.apache.org 下载正版 tar.gz,它可以与您拥有的任何版本的 Java 一起愉快地工作。
我找到了一个最小增量解决方案,尽管关于不使用 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
显然,最后一行是不必要的,但确认结果是 java 8.