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构建的退出状态,若构建失败则直接退出脚本,不进入服务启动流程:
- 定位Maven构建代码:在refine脚本中找到执行Maven编译的命令(通常是类似
mvn clean install的语句)。 - 添加退出状态检查:在Maven命令执行后,立即检查其退出码,若不为0则终止脚本:
# 原Maven构建命令示例 mvn clean install # 新增检查逻辑 if [ $? -ne 0 ]; then echo "构建失败,终止OpenRefine启动" exit 1 fi
- 隔离启动逻辑:将你定位到的服务启动代码放在上述检查逻辑之后,确保只有构建成功时才会执行启动操作:
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
相关产品推荐
相关产品推荐

