为 Eclipse CDT 项目运行无头构建时(通过
nohup
、分离的 screen
会话和 jenkins 尝试),构建失败并出现以下错误(缩短为第一个相关行):
org.eclipse.ui.ide unable to load class org.eclipse.ui.internal.ide.misc.FileInfoAttributesMatcher
...
如果我正常登录,构建会成功运行,但如果我注销,构建会失败(这是
nohup
/screen
/jenkins 的目标)。看起来构建失败了,因为它没有 xserver,或者无法访问它。我正在运行的命令类似于:
eclipse
--launcher.suppressErrors \
-nosplash \
-application org.eclipse.cdt.managedbuilder.core.headlessbuild \
-data /path/to/workspace
搜索周围我发现了一些建议我更改 jenkins 的 cron 设置,或重新设计 eclipse 项目,但同一个项目是通过 jenkins 在不同的环境中由运行相同构建脚本的用户构建的。同样奇怪的是,如果我通过
nohup
或独立的 screen
会话运行它,它也会以同样的方式失败,但前提是我注销。运行任意一个,不注销成功。
我正在 RHEL 8 中运行。
答案最终是
DISPLAY
环境变量。当我没有登录时它是空的或无效的。我设置它:
export DISPLAY=localhost:10.0
在我的詹金斯工作脚本中解决了这个问题(至少对于詹金斯建设而言)。当寻找在 PC 上运行的 xserver 时,我通过 ssh 登录到 PC 并检查了
DISPLAY
变量。