【Linux】完美解决缩略图工具gm调用java.io.FileNotFoundException: gm问题

首先确保满足如下前置条件:

1、执行which gm和gm version能读取出信息;

2、程序调用路径(看代码,如:/usr/local/bin)与系统全局配置路径(执行which gm,如:/usr/bin)不一致。

如下方案在确认了程序调用路径(/usr/local/bin)情况下,修改全局调用路径(/usr/bin)处理如下:

在类似CentOS 8系统中试用命令sudo yum ... 安装gm工具软件后,默认在/usr/bin下。

复制代码
# 若还没有安装gm的,执行gm安装命令
sudo yum install -y GraphicsMagick GraphicsMagick-devel

需要将位于/usr/bin下的gm工具迁移到/usr/local/bin目录,同时彻底解决Java im4java调用时的FileNotFoundException: gm报错,以下是完整的分步操作方案:

一、迁移gm可执行文件

移动文件‌:执行命令将gm从原路径迁移到目标目录:

复制代码
# 在终端执行以下命令,尝试查找 gm 文件。
find / -name "gm" -type f 2>/dev/null

# gm迁移到指定位置
sudo mv /usr/bin/gm /usr/local/bin/

验证迁移结果‌:执行ls -l /usr/local/bin/gm,确认文件已成功移动到新目录。

二、配置全局环境变量适配新路径

创建专属配置文件‌:执行命令新建gm的环境变量脚本

复制代码
vi /etc/profile.d/gm_new_path.sh

写入配置内容‌:在文件中填入适配新路径的变量配置:

复制代码
# GraphicsMagick 新路径环境变量
export GMAGICK_HOME="/usr/local"
export PATH="$GMAGICK_HOME/bin:$PATH"
export LD_LIBRARY_PATH="$GMAGICK_HOME/lib64:$LD_LIBRARY_PATH"
# 关键:指定im4java识别的工具路径
export IM4JAVA_TOOLPATH="/usr/local/bin"

赋予权限并生效‌:执行以下命令让配置立即生效:

复制代码
chmod +x /etc/profile.d/gm_new_path.sh
source /etc/profile

三、系统层校验迁移有效性

验证命令全局可用‌:执行which gm,输出结果应为/usr/local/bin/gm,确认系统已识别新路径。

验证命令功能正常‌:执行gm version,正常输出版本信息说明迁移后gm本身可正常运行。

校验跨用户权限‌:切换到运行Java程序的普通用户,执行gm version,确认非root用户也能正常调用新路径下的gm命令。

四、Java im4java代码层兜底适配

全局硬编码新路径‌:在项目启动类的静态代码块中绑定新路径,完全脱离系统环境变量依赖:

复制代码
import org.im4java.process.ProcessStarter;
static {
    ProcessStarter.setGlobalSearchPath("/usr/local/bin");
}

单命令实例指定路径‌:在初始化ConvertCmd对象时单独指定搜索路径,避免全局配置冲突:

复制代码
import org.im4java.core.ConvertCmd;
ConvertCmd cmd = new ConvertCmd(true);
cmd.setSearchPath("/usr/local/bin");

五、最终验证与排障

重启Java应用进程‌:完全停止Java服务后重新启动,让新的环境变量配置被Java进程继承。

校验进程环境变量‌:通过Java进程PID查看进程实际继承的PATH,确认包含/usr/local/bin路径。

触发业务功能测试‌:重新执行上传图片的业务操作,确认不再抛出FileNotFoundException: gm报错

相关推荐
高级程序源12 小时前
django校园寻物通失物招领平台32261-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·django·flask·课程设计
WeiXin_DZbishe12 小时前
基于springboot宠物领养系统-计算机毕设 附源码【课程设计】94217
vue.js·spring boot·python·django·php·课程设计
kimnoic13 小时前
Python数据库学习心得:SQLite、MySQL、PostgreSQL优缺点
开发语言·python
snhna13 小时前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
别动我齐刘海14 小时前
C++ 工程化学习
java·linux·前端·c++·学习·机器学习·机器人
必须得开心呀14 小时前
python编写带界面的软件,需要安装哪些插件
开发语言·python
Wx-bishekaifayuan14 小时前
express皖美特色农产品网售系统53118-计算机课程设计、毕业设计
人工智能·spring boot·后端·python·课程设计·express·旅游
青少儿编程课堂14 小时前
迪杰斯特拉(Dijkstra)算法:单源最短路与赛场路线规划
c++·python·算法·bfs·信息学竞赛
计算机编程指导师15 小时前
【计算机毕设推荐】基于Hadoop+Spark的公共交通运营数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·数据分析·spark·交通
Wx-bishekaifayuan15 小时前
springboot汉中旅游服务平台41442-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游