Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.util.calendar.ZoneInfoFile

I ran into this exception when i tried to start elasticsearch-6.8.20 using the command systemctl start elasticsearch.service

 Starting Elasticsearch... systemd[1]: Started Elasticsearch. elasticsearch[71380]: Exception in thread "main" java.lang.NoClassDefFoundError: Could not initialize class sun.util.calendar.ZoneInfoFile elasticsearch[71380]: #011at sun.util.calendar.ZoneInfo.getTimeZone(ZoneInfo.java:589) elasticsearch[71380]: #011at java.util.TimeZone.getTimeZone(TimeZone.java:560) elasticsearch[71380]: #011at java.util.TimeZone.setDefaultZone(TimeZone.java:666) elasticsearch[71380]: #011at java.util.TimeZone.getDefaultRef(TimeZone.java:636) elasticsearch[71380]: #011at java.util.TimeZone.getDefault(TimeZone.java:625) elasticsearch[71380]: #011at java.text.SimpleDateFormat.initializeCalendar(SimpleDateFormat.java:657) elasticsearch[71380]: #011at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:601) elasticsearch[71380]: #011at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:580) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusData.getFormattedStatus(StatusData.java:122) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusConsoleListener.log(StatusConsoleListener.java:81) elasticsearch[71380]: #011at org.apache.logging.log4j.status.StatusLogger.logMessage(StatusLogger.java:278) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2002) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1974) elasticsearch[71380]: #011at org.apache.logging.log4j.spi.AbstractLogger.error(AbstractLogger.java:741) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:592) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:639) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:415) elasticsearch[71380]: #011at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:177) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout$SerializerBuilder.build(PatternLayout.java:377) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:129) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout.<init>(PatternLayout.java:59) elasticsearch[71380]: #011at org.apache.logging.log4j.core.layout.PatternLayout$Builder.build(PatternLayout.java:660) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.setToDefault(AbstractConfiguration.java:584) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:560) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:204) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:161) elasticsearch[71380]: #011at org.apache.logging.log4j.core.config.builder.impl.DefaultConfigurationBuilder.build(DefaultConfigurationBuilder.java:57) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configureStatusLogger(LogConfigurator.java:250) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:166) elasticsearch[71380]: #011at org.elasticsearch.common.logging.LogConfigurator.configure(LogConfigurator.java:127) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:302) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:159) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:150) elasticsearch[71380]: #011at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) elasticsearch[71380]: #011at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) elasticsearch[71380]: #011at org.elasticsearch.cli.Command.main(Command.java:90) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:116) elasticsearch[71380]: #011at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) systemd[1]: elasticsearch.service: Main process exited, code=exited, status=1/FAILURE systemd[1]: elasticsearch.service: Failed with result 'exit-code'.

The service is not logging under the path defined in the config file elasticsearch.yml. any idea what could be the cause? I'm using openjdk version "1.8.0_312" and Red Hat release 8.3

2

2 Answers

I figured out the problem. The TimeZone dependency was missing from the OpenJDK installation: The symbolic link $JAVA_HOME/jre/lib/tzdb.dat -> /usr/share/javazi-1.8/tzdb.dat was pointing to an empty directory. I downloaded the rpm file tzdata-java-2021c-1.el8.noarch.rpm and installed using the command:rpm -ivh tzdata-java-2021c-1.el8.noarch.rpm

All works fine now.

According to java.lang.NoClassDefFoundError: Could not initialize class XXX, the problem may be related to static initializer of ZoneInfoFile.java.

What I can suggest is to create a simple class that use ZoneInfoFile and run in the server, to find out why this class cannot be initialized.

import sun.util.calendar.ZoneInfoFile;
public class TestInitZoneInfoFile { public static void main(String[] args) { ZoneInfoFile.getZoneInfo("dummy"); }
}

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like