ライブラリ クラスをインポートする tomcat で groovy サーブレット (groovlet) を実行する際に問題が発生しています。何もインポートしない場合、groovlet は正しく動作しますが、クラスパスにあると思われるものをインポートすると (通常のサーブレットで同じクラスを正常にインポートできます)、次のエラーが表示されます。
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.
を含む jarMyLibraryClass
は にshared/lib
あり、次の in によって tomcat によってロードされます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()
私の groovlet はWEB-INF/groovy/MyGroovlet.groovy
、GroovyServlet APIに従って にデプロイされます。
にアクセスするhttp://localhost:8080/myapplication/MyGroovlet.groovy
と、前述のエラーがアプリケーション ログに書き込まれます。
GroovyServlet のランタイム クラスパスを明示的に宣言する必要がある方法はありますか? WEB-INF/lib
実際のMyLibraryClass.class
ファイルをに移動するなど、ライブラリ jar をいくつかの場所に移動しようとしましWEB-INF/classes
たが、うまくいきませんでした。