Ballerina原生构建UUID包出现int范围错误如何解决
修复Ballerina原生构建的uuid模块类型错误
错误原因
报错显示0x8000000000000000超出int类型范围,是因为uuid 1.3.0版本的代码中错误地将64位整数值当作32位int处理,同时当前使用的GraalVM Java17与Ballerina 2201.3.2及uuid 1.3.0的兼容性存在冲突。
修复步骤
1. 升级uuid模块版本
修改dependencies.toml中的uuid版本为兼容Ballerina 2201.3.2的新版本(如1.4.0,该版本已修复类型错误问题):
[[package]] org = "ballerina" name = "uuid" version = "1.4.0" dependencies = [ {org = "ballerina", name = "crypto"}, {org = "ballerina", name = "jballerina.java"}, {org = "ballerina", name = "lang.int"}, {org = "ballerina", name = "regex"}, {org = "ballerina", name = "time"} ] modules = [ {org = "ballerina", packageName = "uuid", moduleName = "uuid"} ]
修改后执行bal update命令更新依赖。
2. 调整GraalVM版本为Java11
Ballerina 2201.3.2(Swan Lake Update 3)对Java11版本的GraalVM兼容性更好,且uuid模块的bala包基于Java11构建,因此修改Dockerfile中的GraalVM安装逻辑:
# 替换原构建阶段的GraalVM安装部分 RUN apt-get update && apt-get -y install wget curl build-essential libz-dev zlib1g-dev && \ wget https://dist.ballerina.io/downloads/2201.3.2/ballerina-2201.3.2-swan-lake-linux-x64.deb && \ dpkg -i ballerina-2201.3.2-swan-lake-linux-x64.deb && rm ballerina-2201.3.2-swan-lake-linux-x64.deb && \ curl -sL https://get.graalvm.org/jdk >install-graalvm.sh && chmod a+x install-graalvm.sh && \ # 指定安装Java11版本的GraalVM ./install-graalvm.sh --java-version 11 --version 22.3.1 && \ export PATH="/src/graalvm-ce-java11-22.3.1/bin:$PATH" && export JAVA_HOME="/src/graalvm-ce-java11-22.3.1" && \ bal build --native
3. 重新构建镜像
执行docker build -t myservice .重新构建镜像,验证错误是否解决。
内容的提问来源于stack exchange,提问作者Sachith Kasthuriarachchi
相关产品推荐
相关产品推荐

