ical4j 2.2.0 используя Grape, выдает java.lang.NoClassDefFoundError: javax / cache / configuration / Configuration при загрузке календаря - PullRequest
0 голосов
/ 07 июня 2018

Ранее я был в состоянии запустить этот скрипт, который читает события из url.ics

import net.fortuna.ical4j.util.Calendars
import net.fortuna.ical4j.model.component.VEvent

@Grapes(
@Grab(group='org.mnode.ical4j', module='ical4j', version='2.2.0')
)
def url = 'https://calendar.google.com/calendar/ical/xxxx/basic.ics'.toURL()
def cal = Calendars.load(url)

Однако теперь я получаю это исключение java.lang.NoClassDefFoundError: javax/cache/configuration/Configuration.

Я предполагаю, что тамкакое-то изменение зависимостей, которое произошло.Я отметил это

javax.cache.cache-api [необязательно *] - поддерживает кэширование определений тимзеона.* ПРИМЕЧАНИЕ: если он не включен, вы должны установить значение для конфигурации net.fortuna.ical4j.timezone.cache.impl

однако теперь я получаю java.lang.NoClassDefFoundError: Could not initialize class net.fortuna.ical4j.validate.AbstractCalendarValidatorFactory

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

1 Ответ

0 голосов
/ 07 июня 2018

ical4j ищет файл свойств с именем ical4j.properties и загружает из него конфигурацию.Создайте этот файл в той же папке и добавьте

net.fortuna.ical4j.timezone.cache.impl=net.fortuna.ical4j.util.MapTimeZoneCache

, чтобы указать поставщика кэша в памяти, который использует ConcurrentHashMap.Если свойство net.fortuna.ical4j.timezone.cache.impl не указано, ical4j возвращается к JCacheTimeZoneCache, который использует диспетчер кэширования и требует, чтобы в пути к классам присутствовала действительная библиотека кэширования.

Альтернативой использованию файла ical4j.properties является установка этогосвойство программно, например

System.setProperty("net.fortuna.ical4j.timezone.cache.impl", "net.fortuna.ical4j.util.MapTimeZoneCache")

Просто не забудьте установить его перед вызовом Calendars.load(url), и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...