ical4j 2.2.0 使用 Grape,在加载日历时抛出 java.lang.NoClassDefFoundError: javax/cache/configuration/Configuration

nar*_*acs 3 groovy ical4j

以前我已经能够运行这个从 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)
Run Code Online (Sandbox Code Playgroud)

但是,现在我遇到了这个异常java.lang.NoClassDefFoundError: javax/cache/configuration/Configuration。

我认为已经发生了某种依赖性变化。我已经注意到这一点

javax.cache.cache-api [可选*] - 支持缓存 timzeone 定义。* 注意:如果不包含,您必须为 net.fortuna.ical4j.timezone.cache.impl 配置设置一个值

然而,现在我得到了这个java.lang.NoClassDefFoundError: Could not initialize class net.fortuna.ical4j.validate.AbstractCalendarValidatorFactory

任何帮助表示赞赏。

Szy*_*iak 5

ical4j 查找名为 的属性文件ical4j.properties并从中加载配置。在同一文件夹中创建此文件并添加

net.fortuna.ical4j.timezone.cache.impl=net.fortuna.ical4j.util.MapTimeZoneCache
Run Code Online (Sandbox Code Playgroud)

指定使用 的内存缓存提供程序ConcurrentHashMap。当未指定属性时net.fortuna.ical4j.timezone.cache.impl,ical4j 会回退到JCacheTimeZoneCache使用缓存管理器并要求类路径中存在有效的缓存库。

使用ical4j.properties文件的替代方法是以编程方式设置此属性,例如

System.setProperty("net.fortuna.ical4j.timezone.cache.impl", "net.fortuna.ical4j.util.MapTimeZoneCache")
Run Code Online (Sandbox Code Playgroud)

只需记住在调用之前进行设置即可Calendars.load(url),它应该可以工作。