ThreeTen toZonedDateTime: исключения, созданные Ant

У меня есть модульный тест, который выдает исключение, потому что в конечном итоге вызывает

DateTimeUtils.toZonedDateTime(cal);

Настроить

Мы только недавно начали использовать threeten-bp в нашем проекте.

Библиотека размещается в центральном проекте, и исключение выдается из проекта, который ссылается на основной проект.

Исключение происходит при двух модульных тестах, выполняемых сценарием сборки ant. Я могу видеть библиотеку threeten в указанном jenkins-home/workspace/Trunk/Project/build/project.jar и там же можно увидеть DB-файл.

Запуск модульного теста из Eclipse не генерирует никаких исключений.

Вторая трассировка стека предполагает, что "Данные, уже загруженные для версии правил часового пояса TZDB: 2014c". Тест вызывающего модуля использовал Календарь без установленного часового пояса, поэтому я предполагаю, что используется часовой пояс по умолчанию.

Я изменил календарь, чтобы использовать часовой пояс UTC, и теперь тест работает без исключения. Тем не менее, я удивляюсь, почему нельзя использовать местное время.

Следы стека

1-й тест

java.lang.NoClassDefFoundError: Could not initialize class org.threeten.bp.zone.ZoneRulesProvider
    at org.threeten.bp.ZoneRegion.ofId(ZoneRegion.java:143)
    at org.threeten.bp.ZoneId.of(ZoneId.java:357)
    at org.threeten.bp.ZoneId.of(ZoneId.java:285)
    at org.threeten.bp.DateTimeUtils.toZoneId(DateTimeUtils.java:141)
    at org.threeten.bp.DateTimeUtils.toZonedDateTime(DateTimeUtils.java:103)
    at ...

2-й тест

java.util.ServiceConfigurationError: org.threeten.bp.zone.ZoneRulesProvider: Provider org.threeten.bp.zone.TzdbZoneRulesProvider could not be instantiated: org.threeten.bp.zone.ZoneRulesException: Unable to load TZDB time-zone rules: jar:file:/jenkins-home/workspace/Trunk/Project/build/project.jar!/org/threeten/bp/TZDB.dat
    at java.util.ServiceLoader.fail(ServiceLoader.java:207)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:164)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:360)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:428)
    at org.threeten.bp.zone.ZoneRulesProvider.<clinit>(ZoneRulesProvider.java:93)
    at org.threeten.bp.ZoneRegion.ofId(ZoneRegion.java:143)
    at org.threeten.bp.ZoneId.of(ZoneId.java:357)
    at org.threeten.bp.ZoneId.of(ZoneId.java:285)
    at org.threeten.bp.DateTimeUtils.toZoneId(DateTimeUtils.java:141)
    at org.threeten.bp.DateTimeUtils.toZonedDateTime(DateTimeUtils.java:103)
    at ...
Caused by: org.threeten.bp.zone.ZoneRulesException: Unable to load TZDB time-zone rules: jar:file:/var/lib/jenkins/workspace/Virtuelles_Kraftwerk_HEAD/WetterGUIClassic/build/weather-base.jar!/org/threeten/bp/TZDB.dat
    at org.threeten.bp.zone.TzdbZoneRulesProvider.load(TzdbZoneRulesProvider.java:146)
    at org.threeten.bp.zone.TzdbZoneRulesProvider.<init>(TzdbZoneRulesProvider.java:87)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:356)

Caused by: org.threeten.bp.zone.ZoneRulesException: Data already loaded for TZDB time-zone rules version: 2014c
    at org.threeten.bp.zone.TzdbZoneRulesProvider.load(TzdbZoneRulesProvider.java:139)

1 ответ

Решение

Эта проблема возникает, если две или три библиотеки tritenbp находятся внутри пути к классам. Это даже происходит, если библиотечные файлы идентичны. В нашем случае мы включили одну и ту же библиотеку дважды, но по разным путям в файловой системе.

С наилучшими пожеланиями, Кристиан

Другие вопросы по тегам