实例化类时没有找到合适的ClassLoader来获取

时间:2014-02-09 11:15:31

标签: groovy classloader jodatime grape

我创建了两个groovy脚本,如下所示。一个脚本有一个在另一个脚本中实例化的类。两者都是默认包。

当我试图运行ImportGpsData.groovy时,我收到以下异常......

Caught: java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError
    at ImportGpsData$_run_closure1.doCall(ImportGpsData.groovy:10)
    at ImportGpsData.run(ImportGpsData.groovy:6)
Caused by: java.lang.RuntimeException: No suitable ClassLoader found for grab
    at DateParser.<clinit>(DateParser.groovy)
    ... 2 more

ImportGpsData.groovy

def file = new File('fells_loop.gpx')

def slurper = new XmlSlurper()
def gpx = slurper.parse(file)

gpx.rte.rtept.each {
    println it.@lat
    println it.@lon

    def parser = new DateParser()
    println parser.parse(it.time.toString())
}

Dateparser.groovy

@Grapes(
    @Grab(group='joda-time', module='joda-time', version='2.3')
)

import org.joda.time.DateTime
import org.joda.time.format.DateTimeFormat

class DateParser {
    def String parse(time){
        def printableTime = new DateTime(time)
        def format = DateTimeFormat.forPattern('MM/dd/yyyy - hh:mm aa')
        return printableTime.toString(format)
    }
}

我发现了其他一些处理No Suitable classloader found for grab错误的StackOverFlow问题。一个答案建议在@Grapes语句中使用@GrabConfig(systemClassLoader=true)但是添加它会导致编译错误,我在第二行中收到错误意外令牌@。

@Grapes([
    @Grab(group='joda-time', module='joda-time', version='2.3')
    @GrabConfig( systemClassLoader=true )
])

使用它的方式在第3行发现了意外的令牌@ 在@GrabConfig之前添加逗号给出以下错误

 Multiple markers at this line
        - Groovy:Invalid duplicate class definition of class DateParser : The source F:\GroovyEclipses\src\DateParser.groovy contains at least two definitions of the class DateParser.
        - General error during conversion: No suitable ClassLoader found for grab java.lang.RuntimeException: No suitable ClassLoader found for grab 

经过进一步分析后,我发现当我在任何脚本中使用@Grapes@Grab时,我收到此错误。但是我必须使用它们来处理joda-time

1 个答案:

答案 0 :(得分:0)

不确定您是否能够解决此问题,如果没有,请先尝试编译类文件:

groovyc Dateparser.groovy

然后再做

groovy ImportGpsData.groovy

应该有用。