3

一点背景。

我的目标是在 ARM64 上使用 JRE 创建一个超薄的 docker 映像。以下是我可以影响最终图像大小的可能区域。

  1. 使用 JAVA 9 及更高版本允许我利用新的 java 模块功能。
  2. 为 ARM64 使用 Alpine 可提供超薄的基础映像。

到目前为止我所做的:有针对 ARM64 的 OpenJDK 9 及更高版本,使用模块功能我得到了大约 30M 的 JRE 大小,这是一个了不起的成就。

现在我正在着手迁移到 Alpine 基础映像,它需要使用 musl-libc 编译 OpenJDK。我设法用glibc重新编译了最新的OpenJDK,我的问题是用musl libc编译OpenJDK 9有多复杂,我的理解是,glibc和musl暴露了相同的接口,基本上,OpenJDK应该与musl-libc兼容。

任何应对这一挑战的方向都将不胜感激。

4

1 回答 1

1

就在(5 月/19 日)—— openjdk9AArch64 的(实验性)现在可以从 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 下载页面中删除,因为它还没有准备好生产。对于 JDK 引导,这可能就足够了,所以尝试掌握它:openjdk-11+28_linux-x64-musl_bin.tar.gz. 如果您想(或必须)坚持使用 JDK9,则可以使用 OpenJDK 8 进行引导,因为它可以作为openjdk8apk 包使用,所以没有问题。

通常启动 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 交叉编译:

于 2018-10-17T07:16:21.100 回答