问题描述
FROM openjdk:17
WORKDIR /opt
EXPOSE 8089
COPY ./target/*.jar app.jar
CMD java -Djava.security.egd=file:/dev/./urandom -jar /opt/app.jar -Duser.timezone=GMT+08
使用上面的脚本打包docker镜像后,app.jar中有上图的字体文件,但是无法通过下面的java代码获取到字体文件
/**
* 定义字体路径
*/
public static final Path FZXBSJT_PATH;
public static final Path FS_GB2312_PATH;
static {
FZXBSJT_PATH = Paths.get(OFDConstant.class.getClassLoader().getResource("fonts/FZXBSJW.TTF").toURI());
FS_GB2312_PATH = Paths.get(OFDConstant.class.getClassLoader().getResource("fonts/SF_GB2312.TTF").toURI());
}
解决方案
1、修改docker打包脚本
FROM openjdk:17
WORKDIR /opt
EXPOSE 8089
COPY ./target/*.jar app.jar
COPY ./src/main/resources/fonts /usr/share/fonts
CMD java -Djava.security.egd=file:/dev/./urandom -jar /opt/app.jar -Duser.timezone=GMT+08
上述脚本是在原先基础上增加了
COPY ./src/main/resources/fonts /usr/share/fonts
作用是将resources下fonts目录中的所有文件拷贝到镜像的/usr/share/fonts目录下
2、修改获取脚本
/**
* 定义字体路径
*/
public static final Path FZXBSJT_PATH;
public static final Path FS_GB2312_PATH;
static {
String osName = System.getProperty("os.name");
if (osName.toLowerCase().contains("windows")) {
try {
FZXBSJT_PATH = Paths.get(OFDConstant.class.getClassLoader().getResource("fonts/FZXBSJW.TTF").toURI());
FS_GB2312_PATH = Paths.get(OFDConstant.class.getClassLoader().getResource("fonts/SF_GB2312.TTF").toURI());
} catch (URISyntaxException e) {
throw new RuntimeException("初始化字体失败");
}
} else {
FZXBSJT_PATH = Paths.get("/usr/share/fonts/FZXBSJW.TTF");
FS_GB2312_PATH = Paths.get("/usr/share/fonts/SF_GB2312.TTF");
}
}