在Grails中使用Groovy Library并获取“找不到合适的ClassLoader for grab”

时间:2014-08-21 13:39:37

标签: grails groovy

我正在使用Grails / Groovy,并使用groovy-wslite进行一些直接的Groovy代码。该代码就是这样开始的

发送-request.groovy

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.0')
import wslite.soap.*

当我将其实现到我的Grails代码中并查看控制器/操作时,我得到了这个

Error 500: Internal Server Error
URI: /FormProj/hello/trigger
Class: java.lang.RuntimeException
Message: No suitable ClassLoader found for grab

这里的代码是当前的状态(我已经尝试了很多不同的东西)

HelloController.groovy

package com.demo
import groovy.grape.Grape

class HelloController {

    def index() { }

    def sayHi() {
        return [
            greeting : "Hi there, ${ params.name }"
        ]
    }

    def trigger() {
        Grape.grab(group:'com.github.groovy-wslite', module:'groovy-wslite', version:'1.1.0')
        …
    }
}

我确定你注意到我对Grails / Groovy非常环保,而且所有的东西都是Java。我知道有一个用于Grails的wslite插件,但肯定这可以正常工作吗?

Grails:2.3.8

Groovy:2.2.2

更新


根据Ian Robert的建议,我已通过将此行添加到BuildConfig块来更新我的dependencies文件

compile 'com.github.groovy-wslite:groovy-wslite:1.1.0'

并将我的控制器更新为这样

HelloController.groovy

package ws.thejspot
import wslite.soap.*

class HelloController {

    def index() { }

    def sayHi() {
        return [
            greeting : "Hi there, ${ params.name }"
        ]
    }

    def trigger() {
        def client = new SOAPClient('URL')
    }
}

不幸的是,现在IDE,GGTS在控制器中显示错误,无法解析类SOAPClient'

1 个答案:

答案 0 :(得分:3)

您应该使用标准的Grails依赖机制 - 编辑@Grab并查找grails-app/conf/BuildConfig.groovy闭包,而不是尝试使用grails.project.dependency.resolution下载依赖项。在其中,您应该在dependencies块中添加

compile 'com.github.groovy-wslite:groovy-wslite:1.1.0'

并从控制器中移除任何与Grape相关的内容,只留下import wslite.soap.*

您可能需要运行

grails compile --refresh-dependencies

至少一次确保Grails获得对BuildConfig的更改 - 每次编译时故意不执行完全依赖性解析,以免过度减慢构建速度,因此您需要当你知道它需要时告诉它刷新。