2012-03-13 11 views
0

grailsアプリケーションからbeanをロードするためにgrailsスクリプトを実行していますが、依存関係の問題があるようです。ここでは、私のコードです:GrailsスクリプトからBeanをロードする

import grails.spring.BeanBuilder 
import org.springframework.context.ApplicationContext 

target(main: "Script to load location information into Solr") { 

println "Hello script" 
def bb = new BeanBuilder() 
ApplicationContext appContext = bb.createApplicationContext() 
def service = appContext.getBean("solrjService") 
} 

setDefaultTarget(main) 

私は、スクリプトを実行すると、私は、次のスタックトレースを取得する:

main: 
Hello script 
java.lang.reflect.InvocationTargetException 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:108) 
at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:130) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) 
    Caused by: java.lang.IllegalAccessError: tried to access field org.slf4j.impl.StaticLoggerBinder.SINGLETON from class org.slf4j.LoggerFactory 
at org.slf4j.LoggerFactory.staticInitialize(LoggerFactory.java:83) 
at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:73) 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131) 
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272) 
at grails.spring.BeanBuilder.<clinit>(BeanBuilder.java:84) 

任意のアイデア?お時間

+0

ため

おかげで私はそれがあなたの新しい空のアプリケーションコンテキストには 'solrjService'豆がないことを伝えるために途中でクラッシュだと仮定します。 –

+0

このgroovyスクリプトからsolrjServiceをロードする必要があります。どうすればいいですか?私がApplicationContext appContext = bb.createApplicationContext() とdef service = appContext.getBean( "solrjService")にコメントすると、クラッシュします。 grailsアプリケーションでどのような依存関係が矛盾しているのか、どうすれば分かりますか? (おそらく、私はBuildconfig.groovyでいくつかのライブラリを除外しなければなりません)Burt –

答えて

2

ため

おかげで、あなたは、コールスタックを読めば、それは明らかにSLF4Jに問題があります。

あなたはSLF4Jのjarファイルのバージョンを混合し、競合を取得することができるように見えます

http://slf4j.org/faq.html#IllegalAccessErrorを参照してください。

もちろん、Burtは正しいです。これを過ぎるとBeanBuilderのApplicationContextがBeanなしで初期化されていることがわかります。

+0

はこのjarファイルを見つける最良の方法ですか?私はそれらが.ivy/cacheディレクトリにあることを知っています(私は手動で見ることができます)が、自動的にそれを行う方法があるのだろうか(いくつかのツール...)ありがとう –

1

私は、今、次に

grails run-script scripts/Myscript.groovy 

(私はクラスパスの問題を抱えていた理由です)私の豆http://grails.org/doc/latest/guide/commandLine.html#creatingGantScripts

includeTargets << grailsScript("_GrailsBootstrap") 

target ('default': "Load Location Information to Solr Server") { 

depends(configureProxy, packageApp, classpath, loadApp, configureApp) 
def service = appCtx.getBean('solrjService') 
println service.getLocationSuggestion("Barcelona") 

} 

私はスクリプトを実行する彼の方法をロードできるようにするには、ターゲット_GrailsBootstrapを含める必要がありました私はこのように実行する

grails Myscript.groovy 

と私はclasspath problを持っていないEMS:Dあなたの助け

関連する問題