java - 如何通过 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/)
解决方案
一种方法是不依赖 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安装参考:
推荐阅读
- pandas - 将 groupby 中的某些列转换为 pandas 中的多级
- python - Python Exchangelib / 如何访问公用文件夹
- java - java中的XML-RPC结构
- c# - 如果目标不是 FrameworkElement,如何在代码隐藏中设置 DynamicResource?
- angular - 命名方法的正确方法
- performance - 哪个操作更快:filter 或 withColumn with when?
- c# - 如何从碰撞中检查对象名称?
- angular - Ngrx 实体,如何定义动作以及如何正确命名具有效果的动作
- azure - 如何在本地调试 EventHubTrigger?
- ios - 如何在 IOS cordva 应用程序中添加 cordova 插件?