open jdk 17使用POI导出 Excel报错解决

Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/ram/openlogic-openjdk-17.0.14+7-linux-x64/lib/libfontmanager.so: libharfbuzz.so.0: cannot open shared object file: No such file or directory
    at java.base/jdk.internal.loader.NativeLibraries.load(Native Method)
    at java.base/jdk.internal.loader.NativeLibraries$NativeLibraryImpl.open(NativeLibraries.java:388)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:232)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:174)
    at java.base/jdk.internal.loader.NativeLibraries.findFromPaths(NativeLibraries.java:315)
    at java.base/jdk.internal.loader.NativeLibraries.loadLibrary(NativeLibraries.java:285)
    at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2403)
    at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:818)
    at java.base/java.lang.System.loadLibrary(System.java:2006)
    at java.desktop/sun.font.FontManagerNativeLibrary$1.run(FontManagerNativeLibrary.java:58)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.desktop/sun.font.FontManagerNativeLibrary.<clinit>(FontManagerNativeLibrary.java:33)
    at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:275)
    at java.desktop/sun.font.SunFontManager$1.run(SunFontManager.java:273)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.desktop/sun.font.SunFontManager.initStatic(SunFontManager.java:273)
    at java.desktop/sun.font.SunFontManager.<clinit>(SunFontManager.java:268)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:467)
    at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:83)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:75)
    at java.desktop/java.awt.Font.getFont2D(Font.java:526)
    at java.desktop/java.awt.Font.canDisplayUpTo(Font.java:2282)
    at java.desktop/java.awt.font.TextLayout.singleFont(TextLayout.java:469)
    at java.desktop/java.awt.font.TextLayout.<init>(TextLayout.java:530)
    at org.apache.poi.ss.util.SheetUtil.getDefaultCharWidthAsFloat(SheetUtil.java:352)
    at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:310)
    at org.apache.poi.ss.util.SheetUtil.getColumnWidth(SheetUtil.java:294)
    at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:497)
    at org.apache.poi.xssf.usermodel.XSSFSheet.autoSizeColumn(XSSFSheet.java:479)
    at TestPOI.main(TestPOI.java:9)

问题的根本原因是 OpenLogic OpenJDK 17.0.14+7 在运行时依赖的 libharfbuzz.so.0 共享库文件缺失。libharfbuzz 是一个用于文本布局和字体形状的库,Java 的字体管理模块依赖于它

可以通过以下命令检查 libharfbuzz.so.0 是否可用:
ldconfig -p | grep libharfbuzz.so.0
如不存在,可通过命令安装
sudo yum install harfbuzz
(libharfbuzz 是一个用于文本布局和字体形状的库,Java 的字体管理模块依赖于它)

如果 libharfbuzz.so.0 已安装但 Java 无法找到它,可以通过设置 LD_LIBRARY_PATH 环境变量来解决:
export LD_LIBRARY_PATH=/path/to/libharfbuzz:$LD_LIBRARY_PATH
如果安装了后,也配置了环境变量,还不行。就有可能是open jdk库 不完整,可通过以下官网下载
openjdk 开源官网下载地址
https://www.openlogic.com/openjdk-downloads

https://builds.openlogic.com/downloadJDK/openlogic-openjdk/17.0.14+7/openlogic-openjdk-17.0.14+7-linux-x64.tar.gz

C:\Users\27052\.jdks\openjdk-22.0.1\bin\java.exe -Xmx700m -Djava.awt.headless=true "-Djna.boot.library.path=E:\IntelliJ IDEA Community Edition 2024.1/lib/jna/amd64" -Djna.nosys=true -Djna.noclasspath=true --add-opens jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED -Dexternal.project.config=C:\Users\27052\AppData\Local\JetBrains\IdeaIC2024.1\projects\项目源码.c3341a32\external_build_system -Dcompile.parallel=false -Drebuild.on.dependency.change=true -Didea.IntToIntBtree.page.size=32768 -Djdt.compiler.useSingleThread=true -Daether.connector.resumeDownloads=false -Dio.netty.initialSeedUniquifier=-175468241574438128 -Dfile.encoding=GBK -Duser.language=zh -Duser.country=CN -Didea.paths.selector=IdeaIC2024.1 -Djps.language.bundle=C:/Users/27052/AppData/Roaming/JetBrains/IdeaIC2024.1/plugins/zh.241.219/lib/zh.241.219.jar "-Didea.home.path=E:/IntelliJ IDEA Community Edition 2024.1" -Didea.config.path=C:/Users/27052/AppData/Roaming/JetBrains/IdeaIC2024.1 -Didea.plugins.path=C:/Users/27052/AppData/Roaming/JetBrains/IdeaIC2024.1/plugins -Djps.log.dir=C:/Users/27052/AppData/Local/JetBrains/IdeaIC2024.1/log/build-log "-Djps.fallback.jdk.home=E:/IntelliJ IDEA Community Edition 2024.1/jbr" -Djps.fallback.jdk.version=17.0.10 -Dio.netty.noUnsafe=true -Djava.io.tmpdir=C:/Users/27052/AppData/Local/JetBrains/IdeaIC2024.1/compile-server/项目源码_5a7db58f/_temp_ -Djps.backward.r
最新发布
03-23
<think>好的,我现在需要帮助用户解决IntelliJ IDEA中Java编译参数的问题,特别是关于OpenJDK 22.0.1和JDKCompiler的配置。首先,我得回顾用户提供的引用内容,确保引用正确应用。 根据引用[1],用户提到了在IDEA中设置和切换JDK环境的步骤,这包括项目级别的JDK配置。引用[2]指出com.sun.tools.javac.util的位置在JDK的lib目录下,而引用[3]则强调模块的.iml文件中可能存在JDK版本冲突,导致启动错误。因此,用户的问题可能涉及到JDK版本不一致,或者编译参数设置错误。 首先,我应该引导用户检查项目的JDK配置是否正确,包括项目结构和模块设置。需要确认项目使用JDK是否与OpenJDK 22.0.1一致,或者是否存在模块中.iml文件指定的不同版本,如JDK-8。根据引用[3],删除错误的.iml文件可以解决问题,但可能需要重新配置模块。 接下来,编译参数方面,用户提到了JDKCompiler和com.sun.tools.javac。需要解释如何正确配置这些参数,可能需要检查编译器路径和依赖库的位置。引用[2]提到Mac环境下JDK的lib路径,这有助于用户确认工具包是否存在。 然后,用户可能需要了解如何在IDEA中设置编译选项,比如指定编译器版本,调整内存参数,或者添加额外的编译器参数。同时,需要提醒用户注意环境变量和项目配置的一致性,避免冲突。 最后,生成相关问题时要围绕JDK配置、编译参数错误处理、模块配置等方向展开,确保覆盖用户可能遇到的后续疑问。</think>### IntelliJ IDEA Java 编译参数配置详解 #### 1. **检查 JDK 版本一致性** - **项目配置**:进入 `File > Project Structure > Project`,确保 `Project SDK` 和 `Project language level` 与 OpenJDK 22.0.1 匹配[^1]。 - **模块配置**:检查每个模块的 `.iml` 文件(如 `xxx-api.iml`),确认 `<component name="NewModuleRootManager">` 下的 `<orderEntry type="jdk">` 是否指向正确的 JDK 路径。若存在版本冲突(如 JDK-8),需手动修改或重新生成该文件[^3]。 #### 2. **配置编译器参数** - **编译器类型**:`JDKCompiler` 默认使用 `com.sun.tools.javac`(位于 JDK 的 `lib/tools.jar` 中)。OpenJDK 22.0.1 的路径通常为: ```bash /usr/local/openjdk-22/lib/tools.jar # Mac/Linux 示例[^2] ``` - **编译选项**:在 `File > Settings > Build, Execution, Deployment > Compiler > Java Compiler` 中: - 指定目标字节码版本(如 `-target 22`)。 - 添加自定义参数(如 `-Xlint:unchecked` 启用警告提示)。 #### 3. **运行时环境验证** - **环境变量**:确保系统变量 `JAVA_HOME` 指向 OpenJDK 22.0.1 的安装路径。 - **依赖检查**:若出现 `com.sun.tools.javac` 相关错误,需确认 `tools.jar` 是否存在于 JDK 的 `lib` 目录下。 #### 4. **常见问题排查** - **版本冲突**:若模块的 `.iml` 文件与项目 JDK 版本不一致,直接删除该文件并重新配置模块。 - **编译器路径**:手动指定编译器路径(适用于自定义 JDK 安装): ```xml <option name="ALTERNATIVE_JRE_PATH" value="$JDK_INSTALL_PATH$" /> ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值