2

我在导入库类的 tomcat 中运行 groovy servlet (groovlet) 时遇到了一些麻烦。当我不导入任何东西时,groovlet 可以正常工作,但是如果我确实导入了我希望在类路径上的东西(我可以在常规 servlet 中成功导入同一个类),我会看到以下错误:

groovy.util.ScriptException: Could not parse scriptName: /MyGroovlet.groovy
java.lang.RuntimeException: groovy.util.ScriptException: Could not parse scriptName: /MyGroovlet.groovy
    at groovy.servlet.GroovyServlet$1.call(GroovyServlet.java:123)
...
Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, /MyGroovlet.groovy: 1: unable to resolve class com.mycompany.mypackage.MyLibraryClass
 @ line 1, column 1.

MyLibraryClass包含is in的 jarshared/lib由 tomcat 通过以下 in 加载catalina.properties

shared.loader=...,${catalina.base}/shared/lib/*.jar,...

我的 groovlet 是按照我的应用程序的用户指南中的描述进行映射的web.xml

<servlet>
    <servlet-name>GroovyServlet</servlet-name>
    <servlet-class>groovy.servlet.GroovyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>GroovyServlet</servlet-name>
    <url-pattern>*.groovy</url-pattern>
</servlet-mapping>

这是 groovlet 的代码MyGroovlet.groovy

import com.mycompany.mypackage.MyLibraryClass
MyLibraryClass.someStaticMethod()

WEB-INF/groovy/MyGroovlet.groovy根据GroovyServlet API ,我的 groovlet 被部署到。

当我访问 时http://localhost:8080/myapplication/MyGroovlet.groovy,前面描述的错误会写入我的应用程序日志。

有什么方法需要我显式声明 GroovyServlet 的运行时类路径?我尝试将库 jar 移动到几个地方,包括WEB-INF/lib并将实际MyLibraryClass.class文件移动到WEB-INF/classes,但没有运气。

4

2 回答 2

1

我正在为 Eclipse 使用 Groovy 插件。在 war 文件中导出 Groovlets 也可以。

当我导出基于 Groovlet 的应用程序时,这个有用的插件会将 .groovy 文件放入 /WEB-INF/classes 目录(在类路径中)。当我在我的 Tomcat 服务器中部署战争文件时它可以工作。

希望这会有所帮助。

问候。

于 2009-02-25T01:50:19.143 回答
0

我犯的一个愚蠢的错误是,我需要在加载我复制到 WEB-INF/lib 的 jar 之前重新加载 webapp(即重新启动整个 Tomcat 服务器,或者只从 Tomcat 管理器重新加载特定的应用程序)。在 Tomcat/webapps/ 目录中动态编辑 .groovy 文件并看到页面的更新立即让我觉得一切都会自动加载,但对于 jars 则不然。直到我意识到发生了什么事,这才令人抓狂。

于 2010-04-30T05:34:09.033 回答