在Grails中使用Groovy库并获得';未找到适合grab';
我正在使用Grails/Groovy,并使用Groovy wslite编写了一些直接的Groovy代码。代码就是这样开始的 发送请求。groovy在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 {
@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')行,但仍然得到相同的错误