Embedded Cassandra不支持MacOS M1芯片问题求助
问题:Embedded Cassandra不支持M1 aarch64芯片
使用环境
- AmazonCorretto OpenJdk 1.8
- Maven构建工具
- MacBook Pro 14 M1芯片
pom.xml配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>CassandraTest</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>com.github.nosan</groupId> <artifactId>embedded-cassandra</artifactId> <version>4.0.7</version> </dependency> <dependency> <groupId>com.datastax.oss</groupId> <artifactId>java-driver-core</artifactId> <version>4.15.0</version> </dependency> </dependencies> </project>
Main.java代码
package org.example; import com.datastax.oss.driver.api.core.CqlSession; import com.github.nosan.embedded.cassandra.Cassandra; import com.github.nosan.embedded.cassandra.CassandraBuilder; import com.github.nosan.embedded.cassandra.Settings; import com.github.nosan.embedded.cassandra.cql.CqlScript; import java.net.InetSocketAddress; public class Main { public static void main(String[] args) { Cassandra cassandra = new CassandraBuilder() .addJvmOptions("-Xmx1024m", "-Xms1024m", "-Xss700k") .build(); cassandra.start(); try { Settings settings = cassandra.getSettings(); try (CqlSession session = CqlSession.builder() .addContactPoint(new InetSocketAddress(settings.getAddress(), settings.getPort())) .withLocalDatacenter("datacenter1") .build()) { CqlScript.ofClassPath("schema.cql").forEachStatement(session::execute); } } finally { cassandra.stop(); } } }
错误日志
ERROR [main] 2023-11-16 15:23:50,249 NativeLibraryDarwin.java:64 - Failed to link the C library against JNA. Native methods will be unavailable. java.lang.UnsatisfiedLinkError: /Users/pavlo/Library/Caches/JNA/temp/jna5079777972566874879.tmp: dlopen(/Users/pavlo/Library/Caches/JNA/temp/jna5079777972566874879.tmp, 0x0001): tried: '/Users/pavlo/Library/Caches/JNA/temp/jna5079777972566874879.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/pavlo/Library/Caches/JNA/temp/jna5079777972566874879.tmp' (no such file), '/Users/pavlo/Library/Caches/JNA/temp/jna5079777972566874879.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64', need 'arm64')) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1934) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1817) at java.lang.Runtime.load0(Runtime.java:782) at java.lang.System.load(System.java:1100) at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:1018) at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:988) at com.sun.jna.Native.<clinit>(Native.java:195) at com.sun.jna.NativeLibrary.<clinit>(NativeLibrary.java:87) at org.apache.cassandra.utils.NativeLibraryDarwin.<clinit>(NativeLibraryDarwin.java:55) at org.apache.cassandra.utils.NativeLibrary.<clinit>(NativeLibrary.java:98) at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:258) at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:765) at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:889)
解决方案
1. 升级JNA依赖版本
错误根源是嵌入式Cassandra依赖的旧版JNA不支持arm64架构,在pom.xml中显式添加高版本JNA依赖,覆盖自带的旧版本:
<dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.13.0</version> <!-- 该版本及以上原生支持arm64 --> </dependency>
2. Rosetta 2临时兼容
如果暂时无法升级依赖,可以通过Rosetta 2以x86_64架构运行Maven:
- 打开终端执行:
arch -x86_64 zsh - 在该终端内运行Maven命令(如
mvn clean exec:java)
3. 升级Embedded Cassandra版本
检查embedded-cassandra的新版本,较新的版本可能已内置支持arm64的JNA依赖,尝试升级到兼容的最新版本:
<dependency> <groupId>com.github.nosan</groupId> <artifactId>embedded-cassandra</artifactId> <version>4.1.0</version> <!-- 请确认版本与JDK 1.8兼容性 --> </dependency>
内容的提问来源于stack exchange,提问作者Pavlo Chechehov
相关产品推荐
相关产品推荐

