我们尝试在alpine_java-17容器中运行java 8应用程序。除了一件事之外,所有的东西都可以正常编译和工作。
关于excel的一个功能不起作用。在日志中我发现:
Could not initialize class sun.awt.X11FontManager
以前,当我们在java8容器中运行应用程序时,我们没有这个问题,因为我们有命令安装所需的软件包:
RUN apt-get install -y fontconfig libfreetype6
但是现在我们有了alpine 17,我们把上面的命令改为
RUN apk add fontconfig
RUN apk add freetype
我试图安装libfreetype6使用运行apk添加libfreetype6,但docker返回我一个错误:
ERROR: unable to select packages:
libfreetype6 (no such package):
required by: world[libfreetype6]
Error response from daemon: The command '/bin/sh -c apk add libfreetype6' returned a non-zero code: 1
看起来freetype和libfreetype6不一样,但是libfreetype6不见了
有人能帮助理解这个问题吗?提前感谢!
在我的情况下,我在基于eclipse-temurin:17-jdk-alpine
的docker映像中遇到了这个问题,运行一个使用apache poi生成excel文件的web应用程序。在按如下方式添加fontconfig
和ttf-dejavu
包之后(似乎freetype
是fontconfig
的依赖,因此不需要显式安装):
RUN apk add --no-cache fontconfig ttf-dejavu
不只是这里给出的FontText.java
类:
https://github.com/AdoptOpenJDK/openjdk-docker/issues/529 issuecomment - 811687786
运行成功,但也可以生成excel文件,这之前会导致问题中给出的异常和以下异常:
...
Caused by: java.lang.UnsatisfiedLinkError: /opt/java/openjdk/lib/libfontmanager.so: Error loading shared library libfreetype.so.6: No such file or directory (needed by /opt/java/openjdk/lib/libfontmanager.so)
at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)