Groovlet + Tomcat:导入库时“无法解析类”

时间:2008-12-09 23:00:31

标签: groovy groovlet

我在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的jar位于shared/lib中,由catalina.properties中的以下内容由tomcat加载:

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

我的groovlet按照我的应用程序web.xml中的user guide所述进行映射:

<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()

我的groovlet按照GroovyServlet API部署到WEB-INF/groovy/MyGroovlet.groovy

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

我是否需要某种方式来显式声明GroovyServlet的运行时类路径?我已经尝试将库jar移动到多个位置,包括WEB-INF/lib并将实际的MyLibraryClass.class文件移动到WEB-INF/classes,但没有运气。

2 个答案:

答案 0 :(得分:1)

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

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

希望这会有所帮助。

问候。

答案 1 :(得分:0)

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