I currently have an app built with spring boot. Im using Jasper reports. When I try to generate a report, I get the following error:
java.lang.NullPointerException: Cannot load from short array because "sun.awt.FontConfiguration.head" is null at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1260) ~[na:na]
The application works fine on my computer, it only fails in docker.
Here's my Dockerfile:
FROM openjdk:17-alpine
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar
RUN apk update;
RUN apk add -f apt-utils;
RUN apk add -f libfreetype6;
RUN apk add --no-cache -f fontconfig;
RUN apk add -f fonts-dejavu;
RUN apk add -f msttcorefonts;
RUN apk add -f libfontconfig1;
RUN apk add -f freetype;
RUN fc-cache --force
ENTRYPOINT ["java","-jar","/site_informativo.jar"]
I have also added jasperreports-fonts EXTENSION in pom.xml but THE PROBLEM CONTINUES.
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports</artifactId>
<version>6.20.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/net.sf.jasperreports/jasperreports-fonts -->
<dependency>
<groupId>net.sf.jasperreports</groupId>
<artifactId>jasperreports-fonts</artifactId>
<version>6.20.0</version>
</dependency>
If I do
FROM openjdk:17-oracle
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar
ENTRYPOINT ["java","-jar","/site_informativo.jar"]
I get
Font "Times New Roman" is not available to the JVM. See the Javadoc for more details.
Solved by adjusting the dockerfile to install the proper microsoft fonts.
FROM openjdk:17-alpine
EXPOSE 10093
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} site_informativo.jar
RUN apk add --no-cache msttcorefonts-installer fontconfig
RUN update-ms-fonts
ENTRYPOINT ["java","-jar","/site_informativo.jar"]
References: