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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 01:25:58