2

ライブラリ クラスをインポートする 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.groovyGroovyServlet APIに従って にデプロイされます。

にアクセスするhttp://localhost:8080/myapplication/MyGroovlet.groovyと、前述のエラーがアプリケーション ログに書き込まれます。

GroovyServlet のランタイム クラスパスを明示的に宣言する必要がある方法はありますか? WEB-INF/lib実際のMyLibraryClass.classファイルをに移動するなど、ライブラリ jar をいくつかの場所に移動しようとしましWEB-INF/classesたが、うまくいきませんでした。

4

2 に答える 2

1

私はEclipse用のGroovyプラグインを使用しています。war ファイルで Groovlets をエクスポートすることもできます。

Groovlet ベースのアプリケーションをエクスポートすると、この便利なプラグインが .groovy ファイルを /WEB-INF/classes ディレクトリ (クラスパス内) に配置します。そして、Tomcat サーバーに war ファイルをデプロイすると機能します。

これが役立つことを願っています。

よろしく。

于 2009-02-25T01:50:19.143 に答える
0

私が犯した愚かな間違いは、WEB-INF/lib にコピーした jar をロードする前に webapp をリロードする必要があったことです (つまり、Tomcat サーバー全体を再起動するか、Tomcat マネージャーから特定のアプリだけをリロードします)。Tomcat/webapps/ ディレクトリ内で .groovy ファイルを動的に編集し、ページの更新を確認すると、すべてが自動ロードされるような気がしましたが、jar ではそうではありませんでした。何が起こっているのかを理解するまで、それは気が狂っていました。

于 2010-04-30T05:34:09.033 に答える