如何抓取远程最新的maven tar.gz文件?

我想在我的docker容器中安装maven 。 这是我的Dockerfile:

 WORKDIR /usr/local RUN wget http://ftp.twaren.net/Unix/Web/apache/maven/maven-3/3.3.3/binaries/apache-maven-3.3.3-bin.tar.gz -O - | tar -xz WORKDIR /usr/local/bin RUN ln -s ../apache-maven-3.3.3/bin/mvn . 

问题是 :

  1. 我希望它能find由https://maven.apache.org/download.cgi报告的最近的服务器,而不是这个硬编码的http://ftp.twaren.net/
  2. 我不想在Dockerfile中对3.3.3版本进行硬编码,我希望通过一些方法来分析https://maven.apache.org/download.cgi ,并获取最新版本。 在Dockerfile中是否有parsing/ domselect?
  3. 你可能会问为什么不只是yum install maven ? 因为我已经安装了jdk8,但是epel仓库中的maven依赖于jdk7,它将安装旧版本并将其设置为默认值。

非常感谢。

我希望它能find由https://maven.apache.org/download.cgi报告的最近的服务器,而不是这个硬编码的http://ftp.twaren.net/

我只是复制他们为官方的图像做的 。 这将至less让你从一个更官方的东西,而不是随机镜像下载。 虽然不会解决邻近问题。

我不想在Dockerfile中硬编码3.3.3版本…

这里几件事情。 大多数直接与你的问题相关的,你可以写一些东西来parsing你自己的信息,并在你的Dockerfile中使用。 这将是复杂而可能脆弱的。

我认为把maven版本烧成版本实际上是一件好事。 这样你的构build是可重复的(和简单)。 如果它在编译时抓住了最新版本,那么你得到的maven版本将不在你的掌握之中。 当你想发布你的图片时,这会让你感到困难,因为你不知道如何标记图片。 例如它是my-maven:3.3.3my-maven:3.3.4 ? 您也可能不再将您的Maven映像的特定版本绑定到您的Dockerfile的一个版本。

所有这一切说,Docker 1.9得到了一个–build-arg标志,它允许你在构build时指定要在你的Dockerfile中使用的variables。 通过这种方式,您可以将您想要构build的Maven版本传入您的映像,而无需修改Dockerfile 。 听起来像这样会让你的生活更轻松。

希望这一切帮助!