Groovy ical4j 2.2.0使用Grape,在加载日历时抛出java.lang.NoClassDefFoundError:javax/cache/configuration/configuration
在此之前,我已经能够运行此脚本,从url.ics读取事件Groovy ical4j 2.2.0使用Grape,在加载日历时抛出java.lang.NoClassDefFoundError:javax/cache/configuration/configuration,groovy,ical4j,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/
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[可选*]-支持缓存timzeone定义。*注意:如果未包括在内,则必须为net.fortuna.ical4j.timezone.cache.impl配置设置一个值
但是,现在我得到了这个java.lang.NoClassDefFoundError:无法初始化类net.fortuna.ical4j.validate.AbstractCalendarValidatorFactory
非常感谢您的帮助。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)
之前设置它,它应该可以工作。这里的困难在于我没有本地文件,我正在使用grape来处理依赖项管理,所以我必须在类似System.properties.'net.fortuna.ical4j.timezone.cache.impl'='net.fortuna.ical4j.util.MapTimeZoneCache'
的代码中完成这将异常更改为java.lang.NoClassDefFoundError:无法初始化类net.fortuna.ical4j.validate.AbstractCalendarValidatorFactory
奇怪的是,它在一个月内运行良好ago@narayanatakacs它也可以与Grapes一起使用——这个属性文件可以添加到Groovy脚本文件的旁边,并且可以在类路径中看到。或者,您可以使用System.setProperty()
方法设置此属性,我已经更新了答案以涵盖此用例。