2017-04-10 91 views
0

我嘗試使用@Grab一些庫添加到一個簡單的Groovy腳本。但是,因爲它似乎有些事情是試圖解析XML,並不能找到執行我不能通過編譯步驟。的Groovy @Grab行不通抱怨

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) 

回答

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 
}