我在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
,但没有运气。
答案 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不是这样。在我意识到发生了什么之前,它一直很令人抓狂。