已安装Java 11但Jenkins启动失败,请求问题排查帮助
解决Java 11下Jenkins启动时
NoClassDefFoundError: sun.util.calendar.ZoneInfoFile问题 问题描述
已安装Java 11,启动Jenkins多次失败,启动日志如下:
-- jenkins.service 已开始启动。 运行路径: /usr/share/java/jenkins.war java.lang.NoClassDefFoundError: 无法初始化类 sun.util.calendar.ZoneInfoFile at java.base/sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:588) at java.base/java.util.TimeZone.getTimeZone(TimeZone.java:577) at java.base/java.util.TimeZone.setDefaultZone(TimeZone.java:682) at java.base/java.util.TimeZone.getDefaultRef(TimeZone.java:653) at java.base/java.util.TimeZone.getDefault(TimeZone.java:642) at java.base/java.util.Calendar.defaultTimeZone(Calendar.java:1679) at java.base/java.util.Calendar.getInstance(Calendar.java:1660) at java.base/java.text.SimpleDateFormat.initializeCalendar(SimpleDateFormat.java:676) at java.base/java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:620) at java.base/java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:599) at io.jenkins.lib.support_log_formatter.SupportLogFormatter.lambda$static$0(SupportLogFormatter.java:47) at java.base/java.lang.ThreadLocal$SuppliedThreadLocal.initialValue(ThreadLocal.java:305) at java.base/java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:195) at java.base/java.lang.ThreadLocal.get(ThreadLocal.java:172) at io.jenkins.lib.support_log_formatter.SupportLogFormatter.formatTime(SupportLogFormatter.java:53) at io.jenkins.lib.support_log_formatter.SupportLogFormatter.format(SupportLogFormatter.java:63) at java.logging/java.util.logging.StreamHandler.publish(StreamHandler.java:199) at java.logging/java.util.logging.ConsoleHandler.publish(ConsoleHandler.java:95) start jenkins success
解决方案
这个错误核心是Java无法初始化时区处理类,通常和时区配置、JDK完整性或系统环境有关,可按以下步骤排查:
检查并修复系统时区
执行timedatectl查看当前时区,确认时区有效(如Asia/Shanghai)。若时区错误,执行:timedatectl set-timezone Asia/Shanghai验证JDK完整性
部分精简版JDK可能缺失时区数据,执行java -XshowSettings:properties -version查看user.timezone属性是否正常;也可检查系统时区文件:zdump /usr/share/zoneinfo/Asia/Shanghai若文件不存在或JDK不完整,重新安装完整的OpenJDK 11包。
强制设置Jenkins启动时区
修改Jenkins服务配置文件(通常为/etc/systemd/system/jenkins.service),在ExecStart行末尾添加时区参数:ExecStart=/usr/bin/java -Duser.timezone=Asia/Shanghai -jar /usr/share/java/jenkins.war然后重新加载服务并重启:
systemctl daemon-reload systemctl restart jenkins修复系统Locale设置
执行locale查看环境变量,确保LANG和LC_TIME为有效UTF-8 locale(如zh_CN.UTF-8),若异常执行:localectl set-locale LANG=zh_CN.UTF-8
内容的提问来源于stack exchange,提问作者Jovarie Inoc
相关产品推荐
相关产品推荐

