MacOS M2环境下Podman运行gradlew失败,求问题排查
解决Podman运行Gradle Wrapper时的mmap错误与主类找不到问题
排查本地Gradle Wrapper包完整性
错误提示里的mmap failed for CEN and END part of zip file直接指向gradle/wrapper/gradle-wrapper.jar文件损坏或不完整。先在本地Mac项目目录里删掉这个文件,然后执行一次./gradlew,让它自动下载对应版本的完整jar包,再重新挂载到容器中运行。调整容器权限设置
你用的--userns=keep-id:uid=1000,gid=1000可能导致容器内用户无权限读取挂载的文件。可以先去掉这个参数,换成以下命令测试:podman run --rm -it -v $(pwd):/app -w /app gradle:7.4-jdk8 bash如果正常执行,再修正本地文件权限:
sudo chown -R 1000:1000 ./gradle之后再用原来的
--userns参数运行容器。在容器内重新生成Gradle Wrapper
进入容器后,先删除挂载过来的损坏wrapper文件,重新生成完整的wrapper组件:rm -rf ./gradle gradle wrapper --gradle-version 7.4 ./gradlew cleanTest test --no-daemon容器内生成的jar包不会受本地文件问题影响,能保证完整性。
避免挂载,直接复制文件到容器
Mac Podman的虚拟机挂载偶尔会有文件系统兼容性问题,导致zip文件损坏。可以先把项目复制到容器内再执行命令:# 启动容器并后台运行 podman run -d --name gradle-test -w /app gradle:7.4-jdk8 sleep 3600 # 复制本地项目到容器 podman cp . gradle-test:/app # 进入容器执行命令 podman exec -it gradle-test bash ./gradlew cleanTest test --no-daemon # 执行完删除容器 podman stop gradle-test && podman rm gradle-test
内容的提问来源于stack exchange,提问作者Pavel Klyuev
相关产品推荐
相关产品推荐

