You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下OpenRefine编译出错时refine脚本未终止运行问题问询

OpenRefine编译失败后refine脚本未终止仍启动服务的修复

问题概述

在Linux环境下编译OpenRefine时,若Maven构建(如Wikibase扩展编译出错)失败,refine脚本不会终止,反而会继续尝试启动OpenRefine服务。

重现步骤

  • 执行./refine clean清理项目
  • 人为制造编译错误,例如删除文件./extensions/wikibase/src/org/openrefine/wikibase/qa/QAWarning.java
  • 运行./refine脚本

当前现象

Wikibase扩展编译失败,但脚本仍启动服务,相关日志示例:

...
[ERROR] extensions/wikibase/src/org/openrefine/wikibase/qa/scrutinizers/NewEntityScrutinizer.java:[104,17] cannot find symbol
[ERROR]   symbol:   class QAWarning
[ERROR]   location: class org.openrefine.wikibase.qa.scrutinizers.NewEntityScrutinizer
[ERROR] extensions/wikibase/src/org/openrefine/wikibase/qa/scrutinizers/NewEntityScrutinizer.java:[104,39] cannot find symbol
[ERROR]   symbol:   class QAWarning
[ERROR]   location: class org.openrefine.wikibase.qa.scrutinizers.NewEntityScrutinizer
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :wikibase


15:54:05.840 [            refine_server] Starting Server bound to '127.0.0.1:3333' (0ms)
15:54:05.975 [            refine_server] refine.memory size: 1400M JVM Max heap: 1468006400 bytes (135ms)
15:54:06.359 [            refine_server] Initializing context: '/' from '/home/user/OpenRefine/main/webapp' (384ms)
15:54:06.948 [            refine_server] Starting autoreloading scanner...  (589ms)
15:54:13.478 [                   refine] Starting OpenRefine 3.8-SNAPSHOT [acca2dd]... (6530ms)
15:54:13.495 [                   refine] initializing FileProjectManager with dir (17ms)
...

预期行为

refine脚本应在Maven构建失败后立即终止,不执行后续服务启动逻辑。

解决方案

核心是在脚本中捕获Maven构建的退出状态,若构建失败则直接退出脚本,不进入服务启动流程:

  1. 定位Maven构建代码:在refine脚本中找到执行Maven编译的命令(通常是类似mvn clean install的语句)。
  2. 添加退出状态检查:在Maven命令执行后,立即检查其退出码,若不为0则终止脚本:
# 原Maven构建命令示例
mvn clean install

# 新增检查逻辑
if [ $? -ne 0 ]; then
    echo "构建失败,终止OpenRefine启动"
    exit 1
fi
  1. 隔离启动逻辑:将你定位到的服务启动代码放在上述检查逻辑之后,确保只有构建成功时才会执行启动操作:
RUN_CMD=("$JAVA" -cp "$CLASSPATH" "${OPTS[@]}" "com.google.refine.Refine")

echo ""

if [ -z "$FORK" ] ; then
    exec "${RUN_CMD[@]}"
else
    "${RUN_CMD[@]}" &
    REFINE_PID="$!"
fi

通过这种方式,只要Maven构建出现错误(退出码非0),脚本就会直接终止,不会继续尝试启动服务。

内容的提问来源于stack exchange,提问作者otter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 05:35:04