Pi4J类路径错误:IntelliJ远程部署代码到树莓派Zero W运行失败
问题原因
- 基础命令使用错误:
java -cp参数后需要先指定类路径,再跟主类全限定名,你之前将jar包名放在主类的位置,属于命令格式错误,因此触发类找不到异常;仅指定单个业务jar作为类路径时没有包含Pi4J相关依赖,自然找不到Pi4J的核心类。 - 树莓派Zero W架构兼容问题:你同事的树莓派4为armv7/armv8架构,兼容Pi4J v2默认绑定的pigpio二进制文件;而树莓派Zero W为armv6架构,默认的Pi4J pigpio插件内置的二进制不支持该架构,因此即使fat jar包含了依赖,运行时也会找不到pigpio相关的provider。
- 远程执行命令配置错误:ant脚本中默认的远程执行命令类路径配置有误,在远程设备上执行失败返回错误码1,因此触发maven的antrun插件报错。
解决方案
- 修正Java执行命令
- 若使用
dist/lib目录下的分散jar执行,命令应为:
该命令会将当前目录下所有jar都加入类路径,无需单独指定依赖。java -cp "./*" com.geekhelp.Main- 若使用fat jar执行,优先使用
-jar参数直接运行(前提是打包时已在MANIFEST.MF中指定主类,Archetype默认已经配置):
java -jar pitest2-jar-with-dependencies.jar - 若使用
- 适配树莓派Zero W的armv6架构
- 先在树莓派上安装系统级pigpio依赖并启动服务:
sudo apt update && sudo apt install -y pigpio sudo systemctl enable --now pigpiod- 运行时添加参数指定使用系统原生的pigpio库,避免使用Pi4J内置的不兼容二进制:
java -Dpi4j.library.path=/usr/lib/arm-linux-gnueabihf -jar pitest2-jar-with-dependencies.jar - 修复远程执行配置
打开项目根目录下的antrun/build.xml,找到123行附近的远程执行命令,将默认执行逻辑替换为上述你测试可用的fat jar执行命令,后续执行mvn antrun:run@exec就会正常调用正确的启动命令。
内容的提问来源于stack exchange,提问作者Radika Moonesinghe
相关产品推荐
相关产品推荐

