首页 > 解决方案 > 如何通过 sdkman 非交互式安装最新的 java 版本?

问题描述

在我们的 CI/CD 环境中,我们有几个 docker 镜像和 sdkman 预安装的 java。但是有一个小问题,版本号经常变化,我们的 docker build 由于缺少包版本而失败。例如。:

sdk install java 8.0.232-zulu

Stop! java 8.0.232-zulu is not available. Possible causes:
 * 8.0.232-zulu is an invalid version
 * java binaries are incompatible with Linux64
 * java has not been released yet

是否有任何选项可以非交互式安装最新的 java 在 sepecyfic“风味”和版本中?

就像是: sdk install java 8-zulu-latest

PS。目前,作为(丑陋的)解决方法,我们使用 sdk install java $(sdk list java | grep -e 8\.0\..*-zulu[^fx] | sed -r s/^.*8/8/)

标签: javadockercontinuous-integrationcontinuous-deploymentsdkman

解决方案


一种方法是不依赖 SDKMAN!。

由于您在 docker 环境下,因此还希望将图像大小保持在最小。

下面是在alpine下安装最新zulu JDK的例子:


FROM alpine as base

# install zulu jdk
RUN apk --update --no-cache add curl \
    && curl https://cdn.azul.com/public_keys/alpine-signing@azul.com-5d5dc44c.rsa.pub > /etc/apk/keys/alpine-signing@azul.com-5d5dc44c.rsa.pub \
    && echo "https://repos.azul.com/zulu/alpine" >> /etc/apk/repositories \
    && apk --update --no-cache add zulu8-jdk \
    && apk del curl

这将下载产品签名密钥 curl 并将 zulu alpine 存储库添加到 apk 存储库列表,安装最新的可用 zulu8-jdk 并删除 curl。

请注意,您也可以替换名称中的 JDK 版本。例如,使用 zulu11-jdk 来安装 JDK 11。

一些有用的zulu安装参考:

https://docs.azul.com/zulu/zuludocs/ZuluUserGuide/InstallingZulu/InstallOnLinuxUsingAPKRepository.htm

https://docs.azul.com/zulu/zuludocs/ZuluUserGuide/PrepareZuluPlatform/AttachAPKRepositoryAlpineLinux.htm


推荐阅读