Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Grails中使用Groovy库并获得';未找到适合grab';_Grails_Groovy - Fatal编程技术网

在Grails中使用Groovy库并获得';未找到适合grab';

在Grails中使用Groovy库并获得';未找到适合grab';,grails,groovy,Grails,Groovy,我正在使用Grails/Groovy,并使用Groovy wslite编写了一些直接的Groovy代码。代码就是这样开始的 发送请求。groovy @Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.0') import wslite.soap.* package com.demo import groovy.grape.Grape class HelloController {

我正在使用Grails/Groovy,并使用Groovy wslite编写了一些直接的Groovy代码。代码就是这样开始的

发送请求。groovy

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.0')
import wslite.soap.*
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')
        …
    }
}
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')
    }
}
当我将其实现到Grails代码中并查看控制器/操作时,我得到了以下结果

Error 500: Internal Server Error
URI: /FormProj/hello/trigger
Class: java.lang.RuntimeException
Message: No suitable ClassLoader found for grab
下面是当前状态下的代码(我尝试了很多不同的方法)

HelloController.groovy

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.0')
import wslite.soap.*
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')
        …
    }
}
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')
    }
}
我相信您会注意到,我对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

@Grab(group='com.github.groovy-wslite', module='groovy-wslite', version='1.1.0')
import wslite.soap.*
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')
        …
    }
}
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”中显示错误,而不是尝试使用
@Grab下载依赖项,您应该使用标准的Grails依赖机制-编辑
Grails app/conf/BuildConfig.groovy
,并查找
Grails.project.dependency.resolution
闭包。在这里面,您应该在
依赖项
块中添加

compile 'com.github.groovy-wslite:groovy-wslite:1.1.0'
并从控制器中删除任何与Grape相关的内容,只保留导入wslite.soap.*

你可能需要跑步

grails compile --refresh-dependencies

至少一次,以确保Grails接受您对
BuildConfig
的更改—它故意不在每次编译时执行完全依赖项解析,以免使构建速度过慢,因此您需要告诉它在需要时刷新。

Hi Ian,因此我在BuildConfig文件中添加了您提到的行,并从控制器中删除所有与葡萄相关的项目。该方法的下一行在我的独立groovy代码中工作,是def client=new SOAPClient('URL'),但是现在IDE标记了一个错误“无法解析类SOAPClient”@dscl您仍然需要
导入
,而不是
@Grab
抱歉,我实际上没有提到我在那里有这个。总而言之,我在BuildConfig中添加了编译行,我的控制器现在在顶部有import wslite.soap.*,但在我的类方法中,IDE仍然在该行警告我它无法解析类SOAPClient。这可能是误报吗?@dscl现在应该可以了,当我从IDE中随机得到类似这样无法解释的东西时,我发现项目的干净重建通常会修复它。谈到令人沮丧的是,我无法得到干净的工作,所以我建了一个全新的项目,添加了依赖项,创建了控制器,添加了导入,添加了def client=new SOAPClient('URL')行,但仍然得到相同的错误