M1 Apple Silicon Mac 上的 Dynamodb 本地设置

Ahs*_*jaz 19 java macos amazon-dynamodb-local apple-m1

我使用https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/DynamoDBLocal.DownloadingAndRunning.html进行了 dynamodb 的本地设置

我可以使用以下命令启动实例java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb,但是当我尝试执行其他操作时,它会出现以下错误。

2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal 日志警告:[sqlite] 无法打开 DB[15]:com.almworks.sqlite4java.SQLiteException:[-91] 无法加载库:java.lang。 UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib,1):找不到合适的图像。确实找到:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构2021 年 15 月 2:10:28 PM com.almworks.sqlite4java.Internal 日志严重:[sqlite] SQLiteQueue[shared-local-instance.db]:运行作业队列时出错 com.almworks.sqlite4java.SQLiteException:[-91] 不能加载库:java.lang.UnsatisfiedLinkError:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:dlopen(/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib,1):没有合适的找到图像。确实找到:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构com.almworks.sqlite4java.SQLite.loadLibrary(SQLite.java:97) 在 com.almworks.sqlite4java.SQLiteConnection.open0(SQLiteConnection.java:1441) 在 com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:282)在 com.almworks.sqlite4java.SQLiteConnection.open(SQLiteConnection.java:293) 在 com.almworks.sqlite4java.SQLiteQueue.openConnection(SQLiteQueue.java:464) 在 com.almworks.sqlite4java.SQLiteQueue.queueFunction(SQLiteQueue.java:641) )在 com.almworks.sqlite4java.SQLiteQueue.runQueue(SQLiteQueue.java:623) 在 com.almworks.sqlite4java.SQLiteQueue.access$000(SQLiteQueue.java:77) 在 com.almworks.sqlite4java.SQLiteQueue$1.run(SQLiteQueue. java:205) 在 java.base/java.lang.Thread.run(未知来源) 引起: java.lang.UnsatisfiedLinkError: /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/Users /ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib, 1):找不到合适的图像。确实找到:/Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构 /Users/ahsanejaz/Downloads/dynamodb_local_latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib:通用包装器中没有匹配的架构java.base/java.lang.ClassLoader$NativeLibrary.load0(本机方法) 在 java.base/java.lang.ClassLoader$NativeLibrary.load(未知来源) 在 java.base/java.lang.ClassLoader$NativeLibrary.loadLibrary(来源未知)位于 java.base/java.lang.ClassLoader。

此问题与新的 M1 Apple Silicon 架构有关吗?有什么解决方法吗?

vey*_*kin 14

您可以使用新发布的 Apple Silicon (M1) 库。将此文件作为依赖项添加到您的项目中,或者如果您使用基于文件夹的方法,则将此文件复制到本机库路径中应该可以修复错误:

io.github.ganadist.sqlite4java:libsqlite4java-osx-aarch64:1.0.392
Run Code Online (Sandbox Code Playgroud)

直接下载链接:https://repo1.maven.org/maven2/io/github/ganadist/sqlite4java/libsqlite4java-osx-aarch64/1.0.392/libsqlite4java-osx-aarch64-1.0.392.dylib

您可以使用sqlite4java.library.path系统属性指定自定义本机库路径:

# JVM parameter:
-Dsqlite4java.library.path=./native-libs
# or within source code:
System.setProperty("sqlite4java.library.path", "./native-libs")
Run Code Online (Sandbox Code Playgroud)


小智 9

我能够运行 DynamoDB,安装 java 版本 x86-64 架构而不是 arm64,并从 Rosetta 终端启动它

java --version 
openjdk 16.0.1 2021-04-20
OpenJDK Runtime Environment Zulu16.30+15-CA (build 16.0.1+9)
OpenJDK 64-Bit Server VM Zulu16.30+15-CA (build 16.0.1+9, mixed mode, sharing)
Run Code Online (Sandbox Code Playgroud)

https://www.azul.com/downloads/zulu-community/?version=java-16-sts&os=macos&architecture=x86-64-bit&package=jre

  • 我刚刚在 M1 macbook 上遇到了这个问题。安装适用于 MacOS x64 的官方 Java JDK 解决了该问题。 (3认同)

小智 3

我通过brew安装的dynamodb-local也遇到了同样的问题。显然,正在使用的 sqlite4java lib 中没有 Arm 版本。例如我得到:

Caused by: java.lang.UnsatisfiedLinkError: /opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: dlopen(/opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib, 1): no suitable image found.  Did find:
    /opt/homebrew/Caskroom/dynamodb-local/latest/DynamoDBLocal_lib/libsqlite4java-osx.dylib: no matching architecture in universal wrapper
Run Code Online (Sandbox Code Playgroud)

有趣的是,使用docker 预览版本, docker 镜像对我来说工作得很好,例如,通过使用在您的计算机上本地部署 DynamoDB(在 Docker 选项卡上)中的 docker compose 文件。