Groovy @Grab不会抱怨

时间:2017-04-10 04:27:07

标签: groovy retrofit2

我尝试使用@Grab将一些库添加到一个简单的groovy脚本中。但我无法通过编译步骤,因为似乎有些事情是试图解析XML而无法找到实现。

import retrofit2.Retrofit
@Grapes([
    @Grab(group = 'com.squareup.retrofit2', module = 'retrofit', version = '2.2.0'),
    @Grab(group = 'com.squareup.retrofit2', module = 'converter-jackson', version = '2.2.0'),
    @Grab(group = 'com.squareup.okhttp3', module = 'okhttp', version = '3.5.0'),
    @Grab(group = 'org.slf4j', module = 'slf4j-simple', version = '1.7.12')
])

import retrofit2.converter.gson.GsonConverterFactory

def result = new Retrofit.Builder()
    .baseUrl("http://weather.livedoor.com")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(WeatherService.class)
    .find("400040")

result.execute()

println result.pinpointLocations

在编译期间导致此错误:

Caught: javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
at org.apache.ivy.core.settings.XmlSettingsParser.doParse(XmlSettingsParser.java:160)
at org.apache.ivy.core.settings.XmlSettingsParser.parse(XmlSettingsParser.java:150)
at org.apache.ivy.core.settings.IvySettings.load(IvySettings.java:393)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite$PojoCachedMethodSiteNoUnwrapNoCoerce.invoke(PojoMetaMethodSite.java:233)
at org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite.call(PojoMetaMethodSite.java:56)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:125)
at groovy.grape.GrapeIvy.<init>(GrapeIvy.groovy:99)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at java.lang.Class.newInstance(Class.java:442)
at groovy.grape.Grape.getInstance(Grape.java:121)
at groovy.grape.Grape.grab(Grape.java:159)
at groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378)
at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
at groovy.lang.GroovyShell.run(GroovyShell.java:517)
at groovy.lang.GroovyShell.run(GroovyShell.java:507)
at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653)
at groovy.ui.GroovyMain.run(GroovyMain.java:384)
at groovy.ui.GroovyMain.process(GroovyMain.java:370)
at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129)
at groovy.ui.GroovyMain.main(GroovyMain.java:109)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109)
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131)

1 个答案:

答案 0 :(得分:0)

不知道为什么你要拉杰克逊,然后尝试使用Gson ......无论如何......这都有效

(必须编写我自己的WeatherService,因为你没有指定一个)

@Grab('com.squareup.retrofit2:retrofit:2.2.0')
@Grab('com.squareup.retrofit2:converter-gson:2.2.0')
@Grab('com.squareup.okhttp3:okhttp:3.5.0')
import retrofit2.Call
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
import retrofit2.http.Query
import groovy.transform.*

@ToString
class Link {
    String link
    String name
}

class ForecastResponse {
    List<Link> pinpointLocations
}

interface WeatherService {
    @GET('forecast/webservice/json/v1')
    Call<ForecastResponse> find(@Query('city') String city)
}

def result = new Retrofit.Builder()
    .baseUrl("http://weather.livedoor.com")
    .addConverterFactory(GsonConverterFactory.create())
    .build()
    .create(WeatherService.class)
    .find("400040")

result = result.execute().body()

result.pinpointLocations.each {
    println it
}