M1苹果硅mac上的Dynamodb本地设置

问题描述

我使用 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 log 警告:[sqlite] 无法打开数据库 [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 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal log 严重:[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/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/libos)找到图像。有没有发现: /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(Native Method) 在 java.base/java.lang.classLoader$NativeLibrary.load(来源不明) 在 java.base/java.lang.classLoader$NativeLibrary.loadLibrary(来源不明) 在 java.base/java.lang.classLoader.loadLibrary0(来源不明) 在 java.base/java.lang.classLoader.loadLibrary(来源不明) 在 java.base/java.lang.Runtime.load0(来源不明) 在 java.base/java.lang.System.load(来源不明) 在 com.almworks.sqlite4java.Internal.tryLoadFromPath(Internal.java:340) 在 com.almworks.sqlite4java.Internal.loadLibraryX(Internal.java:117) 在 com.almworks.sqlite4java.sqlite.loadLibrary(sqlite.java:95) ... 9 更多 2021 年 3 月 15 日下午 2:10:28 com.almworks.sqlite4java.Internal log 警告:[sqlite] sqliteQueue[shared-local-instance.db]:异常停止,转世 3000 毫秒内

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

解决方法

我在通过 brew 安装 dynamodb-local 时遇到了同样的问题。显然,正在使用的 sqlite4java 库中没有 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

有趣的是,使用 docker preview version 的 docker 镜像对我来说工作正常,例如通过使用来自 Deploying DynamoDB Locally on Your Computer 的 docker compose 文件(在 Docker 选项卡上)。

,

我能够运行 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)

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