如何解决Maven构建镜像时的MojoExecutionException及链接错误
解决M1 Mac上dockerfile-maven-plugin执行dockerfile:deploy时的UnsatisfiedLinkError问题
问题背景
本地环境:
- JDK:azul-17 17.0.4
- CPU:M1
- 系统:12.6 (21G115)
执行mvn dockerfile:deploy时触发org.apache.maven.plugin.MojoExecutionException,核心错误为:
java.lang.UnsatisfiedLinkError: Can't load library: /var/folders/s8/13717jdj3jn4gq6n5y9jh8480000gn/T/jffi7101705819295494870.dylib
指定临时目录中不存在该dylib文件,本质是插件依赖的jffi库不兼容Apple Silicon的arm64架构。
解决方法
1. 升级dockerfile-maven-plugin版本
旧版本插件依赖的jffi库缺乏arm64支持,将插件版本升级至1.4.13(该插件最后一批维护版本),修改pom.xml中的插件配置:
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.13</version> <!-- 保留原有插件配置 --> </plugin>
2. 强制指定arm64兼容的jffi版本
若升级插件后问题仍存在,在pom.xml的dependencyManagement中强制覆盖jffi依赖版本,确保使用支持arm64的版本(如1.3.9):
<dependencyManagement> <dependencies> <dependency> <groupId>com.github.jnr</groupId> <artifactId>jffi</artifactId> <version>1.3.9</version> </dependency> <dependency> <groupId>com.github.jnr</groupId> <artifactId>jffi-native</artifactId> <version>1.3.9</version> <classifier>darwin-aarch64</classifier> </dependency> </dependencies> </dependencyManagement>
3. 用Rosetta 2以x86_64架构运行Maven
通过Rosetta 2模拟x86_64环境执行构建,绕开arm64库兼容问题:
arch -x86_64 mvn dockerfile:deploy
首次执行若提示安装Rosetta 2,按指引完成安装即可。
4. 配置Docker Desktop的架构兼容
开启Docker Desktop的x86/amd64模拟支持:
- 打开Docker Desktop偏好设置
- 进入「Features in Development」选项卡
- 勾选「Use Rosetta for x86/amd64 emulation on Apple Silicon」
- 重启Docker Desktop后重新执行构建命令
内容的提问来源于stack exchange,提问作者jiaqi
相关产品推荐
相关产品推荐

