【问题标题】:Using Groovy Library in Grails and getting 'No suitable ClassLoader found for grab'在 Grails 中使用 Groovy 库并获得“找不到合适的类加载器”
【发布时间】:2014-08-21 13:39:36
【问题描述】:

我正在使用 Grails/Groovy,并且有一些使用 groovy-wslite 的直接 Groovy 代码。那段代码就是这样开始的

send-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”

【问题讨论】:

    标签: grails groovy


    【解决方案1】:

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

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

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

    你可能需要运行

    grails compile --refresh-dependencies
    

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

    【讨论】:

    • 嗨 Ian,我已将您提到的行添加到 BuildConfig 文件中,并从控制器中删除了所有与 Grape 相关的项目。该方法的下一行(适用于我的独立 groovy 代码)是 def client = new SOAPClient('URL'),但现在 IDE 标记错误“无法解析 SOAPClient 类”
    • @dscl 你仍然需要import,而不是@Grab
    • 对不起,我实际上没有提到我确实有那个。因此,回顾一下,我将编译行添加到 BuildConfig 并且我的控制器现在在顶部有 import wslite.soap.*,但在我的类方法中,IDE 仍然在该行警告我它无法解析类 SOAPClient。这可能是误报吗?
    • @dscl 现在应该没问题了,当我从我的 IDE 中得到随机无法解释的东西时,我发现项目的干净重建通常可以修复它。
    • 谈论令人沮丧的我无法清理工作所以我建立了一个全新的项目添加依赖项,创建一个控制器,添加导入,添加行 def client = new SOAPClient('URL ') 仍然得到同样的错误
    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-24
    • 2016-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多