有点背景。
我的目标是在ARM64上使用JRE创建超薄的docker映像。 这是可能会影响最终图像尺寸的区域。
到目前为止,我所做的是: 有适用于ARM64的OpenJDK 9及更高版本,使用模块功能,我得到的JRE大小约为30M,这是一个了不起的成就。
现在,我正在努力转向Alpine基本映像,它需要使用musl-libc编译OpenJDK。 我设法用glibc重新编译了持久的OpenJDK,我的问题是用musl libc编译OpenJDK 9有多复杂,我的理解是,glibc和musl公开了相同的接口,基本上,OpenJDK应该与musl-libc兼容。
任何挑战挑战的方法都会受到赞赏。
答案 0 :(得分:1)
仅在(五月/ 19)-AArch64的openjdk9
(实验)现在可以从Alpine存储库中获得!
包裹详细信息: https://pkgs.alpinelinux.org/package/edge/testing/aarch64/openjdk9
使用以下方法进行抓取:
apk add openjdk9 --repository=http://dl-cdn.alpinelinux.org/alpine/edge/testing
前几天,我不得不在Musl Alpine 3.8上从源代码构建OpenJDK。幸运的是,这非常顺利!因此,如果最终不得不从源代码构建OpenJDK来获得ARM64 musl支持,则可以按照以下步骤对目标进行一些修改。
注1:为了扩展评论中的讨论,关于Musl Alpine的OpenJDK当前正在开发中。最新可用的是JDK 12早期访问,仅适用于X64:http://jdk.java.net/12。 JDK 9、10和11具有开发分支,但尚未GA正式发布。根据您对内置OpenJDK的使用,应该认真考虑这一点。
自然,最好使用经过测试的OpenJDK二进制文件(如果有的话)。
注释2:以下步骤是在X86工作站上,通过OpenJDK 11在Alpine 3.8传统磁盘安装(不是docker)上进行测试的。
先决条件:
包装
在构建之前,应先安装以下软件包(希望我不会丢失任何软件包):
// build tools and utilities
apk add build-base autoconf bash coreutils gawk grep mercurial zip
// X11 libraries
apk add libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
// Additional libraries
apk add alsa-lib-dev cups-dev fontconfig-dev
启动JDK
然后,具有讽刺意味的是,您需要一个引导JDK:安装了与先前版本相同的OpenJDK ...它可能是在主机上运行的OpenJDK(不是交叉编译的),因此您应该动手使用OpenJDK 10或11 musl X86构建。
在某个时候,已经提供了OpenJDK 11早期访问二进制文件,但是由于尚未准备好将其从OpenJDK download page中删除。对于JDK引导,可能就足够了,因此请尝试掌握它:openjdk-11+28_linux-x64-musl_bin.tar.gz
。如果您希望(或必须)坚持使用JDK9,则可以使用OpenJDK 8进行引导,并且因为openjdk8
apk软件包而可用,在那里也没有问题。
通常,构建会自动选择引导JDK,但如果没有,则可以指定它与--with-boot-jdk=[path-to-jdk]
一起配置。
来源:
对于Alpine OpenJDK构建,应使用OpenJDK的Portola分支。这些已经与musl兼容。 JDK 9、10和11有分支。如上所述,它们是实验性的。
获取OpenJDK 11源代码:
hg clone https://hg.openjdk.java.net/portola/jdk11
建筑物:
一旦完成所有设置,构建就非常简单。我用过:
cd jdk11
bash configure
make JOBS=8 LOG=info hotspot
参考:
有关更多参考,请参见JDK11构建说明(不适用于Alpine):
OpenJDK交叉编译: