咨询Pentaho 9.3 Spoon在Apple Silicon M1 ARM上运行报错的解决方案
Apple Silicon Mac(Monterey)下Pentaho Data Integration 9.3启动失败问题解决
问题场景
搭载Apple Silicon的MacBook Pro(Mac OS Monterey系统),安装Pentaho Data Integration 9.3后,install.sh执行无报错,但运行spoon.sh时出现SWT库加载失败错误。当前使用的OpenJDK版本信息:
Openjdk version "11.0.15" 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10)
OpenJDK 64-Bit Server VM (build 11.0.15+10, mixed mode)
错误日志如下:
WARNING: Using java from path DEBUG: _PENTAHO_JAVA_HOME= DEBUG: _PENTAHO_JAVA=java DEBUG: PENTAHO_INSTALLED_LICENSE_PATH= java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons: no swt-cocoa-3738 in java.library.path: [./../libswt/osx64/] no swt-cocoa in java.library.path: [./../libswt/osx64/] Can't load library: /Users/jgregory/.swt/lib/macosx/aarch64/libswt-cocoa-3738.jnilib Can't load library: /Users/jgregory/.swt/lib/macosx/aarch64/libswt-cocoa.jnilib Can't load library: /Users/jgregory/.swt/lib/macosx/aarch64/libswt-cocoa-3738.jnilib at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source) at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source) at org.eclipse.swt.internal.C.<clinit>(Unknown Source) at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source) at org.pentaho.di.ui.core.widget.OsHelper.setAppName(OsHelper.java:106) at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:652) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
解决方法
问题根源是Pentaho 9.3默认提供的SWT库为x86_64架构,与Apple Silicon的arm64(aarch64)架构不兼容,可通过以下方式解决:
替换arm64架构SWT库
- 下载匹配Pentaho所用SWT版本(3738)的arm64架构SWT库文件
- 解压后取出
libswt-cocoa-3738.jnilib、libswt-cocoa.jnilib等核心文件 - 替换Pentaho安装目录下
data-integration/libswt/osx64/中的对应文件 - 手动创建
~/.swt/lib/macosx/aarch64/目录,将上述文件复制到该目录中
通过Rosetta 2以x86_64架构运行
在终端执行以下命令启动Spoon:arch -x86_64 ./spoon.sh若想永久生效,可修改
spoon.sh脚本,在开头添加arch -x86_64前缀,或单独创建包含该命令的启动脚本。配置对应架构的JAVA_HOME
若用Rosetta方式运行,需确保使用x86_64架构的OpenJDK;若替换了arm版SWT库,则需搭配arm64架构的JDK。
在spoon.sh中手动指定JDK路径,示例:export _PENTAHO_JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-11.jdk/Contents/Home
验证
完成操作后重新运行spoon.sh,若不再出现SWT库加载错误,说明问题已解决。
内容的提问来源于stack exchange,提问作者Jason Gregory
相关产品推荐
相关产品推荐

