Groovy servlet在Tomcat中找不到JAR文件

时间:2010-06-08 23:14:42

标签: groovy groovlet grape httpbuilder

我已经创建了一个groovlet,它将充当一种HTTP代理。它接受GET请求,然后根据请求中提供的URL进行Web服务调用。

这是我到目前为止的代码:

@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0')
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*

String url = params.url

def http = new HTTPBuilder(url)

http.request(GET, TEXT) {

     response.success = { resp, reader ->
       println reader
     }

     response.'404' = { resp -> 
       println 'not found!'
     }
}

我在groovlet的WEB-INF/lib文件夹中有Groovy HTTPBuilder个JAR文件。但是,代码不能正常工作。 (我也尝试将文件夹放在$TOMCAT_HOME/common/lib中,结果如下所示。)

当我完全按照上面的方式运行代码时,页面会完全空白。

如果我只删除顶部的@Grab行(因为JAR理论上应该已经在类路径中了),我从Tomcat得到一个讨厌的错误(我在5.5上运行它,但我大致得到了6)上的相同行为:

  

HTTP状态500 - GroovyServlet错误:   脚本:'/ proxy.groovy':脚本   处理失败。启动失败:   语义期间的一般错误   分析:类型   org.apache.http.client.methods.HttpRequestBase   不存在   java.lang.TypeNotPresentException:   类型   org.apache.http.client.methods.HttpRequestBase   不存在......

然后是堆栈跟踪。

我的groovlet出了什么问题?

1 个答案:

答案 0 :(得分:2)

两件事。

首先,似乎Groovlets不能使用Grape(@Grab命令)。这就是当这条线存在时,groovlet无声地失败的原因。

其次,http-builder模块还依赖于大约19个其他包(包括错误消息中引用的org.apache.http.client.methods.HttpRequestBase)。您可以在~/.groovy/grapes文件夹中找到这些包。

如果要查找所有依赖项,请删除Grapes目录。然后在本地运行使用该@Grab命令的脚本。脚本执行完毕后,您可以查看Grapes目录并查看它下载的所有内容。

当我这样做时,我得到了以下包裹清单:

antlr
asm
commons-beanutils
commons-codec
commons-collections
commons-lang
commons-logging
net.sf.ezmorph
net.sf.json-lib
net.sourceforge.nekohtml
org.apache
org.apache.commons
org.apache.httpcomponents
org.codehaus.groovy
org.codehaus.groovy.modules.http-builder
xerces

因此,如果你想在groovlet中使用HttpBuilder,你需要在WEB-INF / lib或你的Tomcat common / lib目录中获取所有这些依赖项。

另一方面,如果您不需要任何非常花哨的东西,可以使用Groovy URL对象。请参阅some examples here