NoClassDefFoundError периодически обнаруживается при использовании ZoneRulesProvider - PullRequest
0 голосов
/ 18 февраля 2020

Я знаю, что это как-то похоже на этот вопрос , но ответ там, похоже, мне не помогает. Но я также сталкиваюсь с той же проблемой ... вот фрагмент журналов,

java.lang.NoClassDefFoundError: Could not initialize class 
java.time.zone.ZoneRulesProvider
java.time.ZoneRegion.ofId(ZoneRegion.java:120)
java.time.ZoneId.of(ZoneId.java:411)
java.time.ZoneId.of(ZoneId.java:359)
java.time.ZoneId.of(ZoneId.java:315)
java.util.TimeZone.toZoneId(TimeZone.java:556)
java.time.ZoneId.systemDefault(ZoneId.java:274)

И похоже, что это происходит от использования ZoneId.systemDefault () в моем служебном методе,

    public  static String formatDate(Date date) {
        if(Objects.nonNull(date)) {
            LocalDate localDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
            return localDate.format(<some_formats_here>);
        }

        return null;
    }

Среда использует,

openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)

Любая помощь приветствуется!

Кстати, это происходит периодически и происходит после развертывания последних кодов на сервере. Я не сталкивался с этим в сборке моего локального компьютера, хотя настроенная среда такая же, как и в производственной.

Спасибо!

1 Ответ

0 голосов
/ 20 февраля 2020

Оказывается, что JVM_HOME должен быть объявлен на системном уровне в соответствии с моим коллегой. Эта часть кода была причиной проблемы:

try {
            String libDir = System.getProperty("java.home") + File.separator + "lib";
            try (DataInputStream dis = new DataInputStream(
                     new BufferedInputStream(new FileInputStream(
                         new File(libDir, "tzdb.dat"))))) {
                load(dis);
            }
        } catch (Exception ex) {
            throw new ZoneRulesException("Unable to load TZDB time-zone rules", ex);
        }

К сожалению, я не могу подробно рассказать о том, как это было действительно решено, но пока это работает для нас. Может помочь другим.

...