You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置/运行jaotc使其找到标准JDK类?

解决JDK9 jaotc编译postgresql jar时的NoClassDefFoundError问题

这个错误很典型——jaotc作为实验性AOT编译器,在处理第三方库时需要所有依赖的类都存在于编译类路径中,你遇到的com.sun.jna.win32.StdCallLibrary找不到的问题,是因为postgresql JDBC驱动依赖了JNA(Java Native Access)的平台扩展类,但这些类默认不在jaotc的默认类路径里。

具体解决步骤:

  • 获取JNA平台扩展jar包:StdCallLibrary属于JNA的平台特定部分,通常包含在jna-platform.jar中。你可以从JNA的官方分发包中获取这个文件(或者如果你的项目依赖管理工具里已经有了,直接找到对应的jar路径)。

  • 修改jaotc命令,添加类路径参数:
    在原有命令基础上,通过--class-path参数把postgresql jar和JNA相关jar都包含进去。注意类路径的分隔符:Linux/macOS用冒号:,Windows用分号;。

    示例命令(假设jna-platform.jar和postgresql jar在同一目录):

    jaotc --compile-for-tiered --info --output ../aoclib/postgresql-9.4.1208.so --class-path ./postgresql-9.4.1208.jar:./jna-platform.jar ./postgresql-9.4.1208.jar
    
  • 排查其他潜在依赖缺失:如果执行后还出现其他NoClassDefFoundError,重复上述步骤,把对应的依赖jar也添加到--class-path中即可。

额外提示:

JDK9的jaotc是实验性功能,对第三方库的兼容性有限。如果后续遇到更多编译问题,你可以考虑:

  • 确认所有依赖的jar包版本与JDK9兼容;
  • 尝试升级到更高版本的JDK(注意:jaotc在JDK16及以后版本被移除,若需继续使用AOT编译,建议转向GraalVM的native-image工具)。

内容的提问来源于stack exchange,提问作者sinus0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:29:28