Caused by: java.lang.Exception: No native library is found for os.name=Linux and os.arch=aarch64
at org.sqlite.SQLiteJDBCLoader.loadSQLiteNativeLibrary(SQLiteJDBCLoader.java:284)
at org.sqlite.SQLiteJDBCLoader.initialize(SQLiteJDBCLoader.java:65)
at org.sqlite.core.NativeDB.load(NativeDB.java:53)
at org.sqlite.core.CoreConnection.open(CoreConnection.java:211)
... 27 common frames omitted
项目使用sqllite作为内置数据库,部署在普通的服务器(x86,arm架构CPU)上没问题,但是部署在国产服务器上使用国产CPU例如:aarch64架构的,龙芯(loongarch64)就报如上报错
看错误信息 No native library found for os.name=Linux, os.arch=loongarch64 是在龙芯系统上找不到,本地library
百度调查,发现是项目依赖的jar包里,不包含龙芯的library,如下图
然后到龙芯的社区里,找到龙芯的maven库,发现他们的库里有sqlite-jdbc的依赖
然后按照说明,修改pom文件, 添加龙芯库
龙芯参照:https://docs.loongnix.cn/maven/introduction.html
<repositories>
<repository>
<id>loongson</id>
<name>Loongson Maven</name>
<url>https://maven.loongnix.cn/loongarchabi1/maven/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>loongson</id>
<name>Loongson Maven</name>
<url>https://maven.loongnix.cn/loongarchabi1/maven/</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled></snapshots>
</pluginRepository>
</pluginRepositories>
修改setting,!loongson 这个的意思 如果 id=loongson里面有这个包 就去loongson里的
<mirror>
<id>central</id>
<mirrorOf>*,!loongson</mirrorOf>
<name>Maven Central</name>
<url>https://maven.aliyun.com/repository/public</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</mirror>
删掉本的库的jar 然后重新下载。如下图,新的包里就包含loongarch64这个了
终极原因:龙芯用的是国产cpu,指令集也是自己研发的。而sqlite 的java驱动是会调用本地接口,所以需要在龙芯架构下编译一份.so文件。而maven中心库里面的sqlite驱动不包含这个龙芯的版本