使用 `apt-get install` 安装 Maven 会用 Java11 覆盖 Java8

Installing maven using `apt-get install` overwrites Java8 with Java11

在我的 Dockerfile 中,我试图简单地将 Maven 添加到我已经具有适当版本 Java8 的图像中。如:

RUN apt-get install -y maven

当我执行此操作时,maven 的安装会带来 Java11 甚至以为我只是想为 Java8 JDK 安装 Maven 我已经安装了盒子。我希望有一些明显的解决方案,既干净又简单。起初我以为 apt-mark hold 可能有用,但我想不出要保存的包的名称。比如我试过

RUN  apt-mark hold default-jdk default-jre \
  && apt-get install -y maven

maven 安装 Java11 似乎非常不友好,没有任何开关告诉它 a) 安装 Java8 或不安装 Java 并且只相信它已安装已经.

关于如何在 ubuntu 上安装 maven 而没有这个问题有什么想法吗?

在我的情况下,我发现我可以通过暂停使用以下 3 个软件包来停止安装 Java11

RUN apt-mark hold default-jdk  \
  && apt-mark hold default-jre \
  && apt-mark hold default-jre-headless \
  && apt-get install -y maven

至少就我的情况而言(Corretto Java8 JDK 安装在 Ubuntu 20 图像上)将这些软件包标记为暂停会阻止 maven 安装更新 java 版本到 11.

It seems very unfriendly of maven to install Java11 without any switch to tell it to either a) install Java8 or do not install Java and just trust that it is installed already.

这不是真正的 Maven 问题。当您执行 apt-get insall 时,包的依赖项也会被安装。但是对于 Maven,你真的不需要用 apt-get 安装它。您可以使用 wget 下载 Maven 并解压缩它。

这是一个 Dockerfile 示例:

FROM adoptopenjdk/openjdk8:debian-slim

RUN apt-get update && apt-get install -y wget && \
    wget https://dlcdn.apache.org/maven/maven-3/3.8.4/binaries/apache-maven-3.8.4-bin.tar.gz && \
    tar -xvzf apache-maven-3.8.4-bin.tar.gz && \
    rm apache-maven-3.8.4-bin.tar.gz

ENTRYPOINT [ "/apache-maven-3.8.4/bin/mvn", "--help" ]`

或者您可以简单地使用带有 Java 8:

的 Maven 图像
FROM maven:3.8.4-jdk-8

ENTRYPOINT [ "mvn", "--help" ]
``

您的系统上现在有两个 java 版本。这本身不是问题。

只是select你想要的默认版本使用

sudo update-alternatives --config java

详情见https://askubuntu.com/q/1288175