如何通过 sdkman 非交互式安装最新的 java 版本?

par*_*sit 6 java continuous-integration continuous-deployment docker sdkman

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

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

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

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

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

小智 2

一种方法是不依赖 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

Run Code Online (Sandbox Code Playgroud)

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

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

一些有用的祖鲁安装参考:

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

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