Я создал два отличных сценария, как показано ниже. В одном скрипте есть класс, экземпляр которого создается в другом скрипте. Оба находятся в пакете по умолчанию.
Когда я пытаюсь запустить 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
.
groovy ImportGpsData.groovy
после перехода в исходный каталог? - person Andre Steingress   schedule 10.02.2014@Grapes
и просто использую@Grab
)... Является ли это частью более крупной системы? Может быть, пришло время перейти к использованию инструмента сборки, такого как gradle? - person tim_yates   schedule 10.02.2014groovy
добавляют . на путь к классу автоматически. - person Andre Steingress   schedule 10.02.2014