Не найден подходящий ClassLoader для захвата при создании экземпляра класса

Я создал два отличных сценария, как показано ниже. В одном скрипте есть класс, экземпляр которого создается в другом скрипте. Оба находятся в пакете по умолчанию.

Когда я пытаюсь запустить 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

ИмпортGpsData.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)
    }
}

Я нашел несколько других вопросов StackOverFlow, связанных с ошибкой No Suitable classloader found for grab. В одном ответе предлагалось использовать @GrabConfig(systemClassLoader=true) внутри оператора @Grapes, однако его добавление приводит к ошибке компиляции, я получаю неожиданный токен ошибки @ во второй строке.

@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.


person Buddha    schedule 09.02.2014    source источник
comment
Какая версия Явы? Я предполагаю, что это будет OpenJdk v1.7?   -  person tim_yates    schedule 09.02.2014
comment
Нет, я использую Oracle JDK v1.7, никогда не устанавливал ничего, кроме этого.   -  person Buddha    schedule 09.02.2014
comment
Интересно. Какая сборка? Который?   -  person tim_yates    schedule 09.02.2014
comment
Java — сборка 45. Groovy — версия 2.2.1.   -  person Buddha    schedule 09.02.2014
comment
Когда я использую Grab без классов, я мог бы использовать joda-time в сценарии, но когда я использую Grab и когда задействованы классы, возникает эта проблема.   -  person Buddha    schedule 09.02.2014
comment
Какую именно команду вы используете для выполнения скрипта? Эта ошибка возникает, если GroovyClassLoader или RootClassLoader не может быть найден как прямой или косвенный родитель CL.   -  person Andre Steingress    schedule 10.02.2014
comment
Я выполнил как скрипт Groovy из eclipse...   -  person Buddha    schedule 10.02.2014
comment
Это работает, просто выполняя groovy ImportGpsData.groovy после перехода в исходный каталог?   -  person Andre Steingress    schedule 10.02.2014
comment
Нет, я получаю сообщение об ошибке, что класс DateParser не найден. не удалось разрешить класс DateParser. Однако я вижу, что файл класса создается, когда я использую groovyc для DateParse.groovy.   -  person Buddha    schedule 10.02.2014
comment
Исходный код у меня работает нормально (я удаляю бит @Grapes и просто использую @Grab)... Является ли это частью более крупной системы? Может быть, пришло время перейти к использованию инструмента сборки, такого как gradle?   -  person tim_yates    schedule 10.02.2014
comment
Это странно. Я проверил это локально, и это сработало. Команды groovy добавляют . на путь к классу автоматически.   -  person Andre Steingress    schedule 10.02.2014
comment
@tim_yates нет, это не часть какой-то более крупной системы. Я только изучаю groovy, и это то, что я пробовал, следуя некоторому примеру. Не уверен, что что-то не так с моей установкой.   -  person Buddha    schedule 11.02.2014
comment
возможный дубликат Не найдено подходящего загрузчика классов   -  person Nick Grealy    schedule 31.10.2014


Ответы (1)


Не уверен, что вы смогли решить эту проблему, если нет, попробуйте сначала скомпилировать файл класса:

groovyc Dateparser.groovy

а затем сделать

groovy ImportGpsData.groovy

должно сработать.

person Subodh Brahmi    schedule 01.02.2016