0

これは、GroovyShell 経由で呼び出されたときに Groovy スクリプトをデバッグするのに非常に役立ちました。ただし、これはスクリプトが完全修飾ファイル名 (例: file:///home/user/x/src/main/groovy/package/File.groovy) でロードされた場合にのみ機能します。

私が使うとき

URL url = Thread.currentThread().getContextClassLoader().getResource("src/main/groovy/package/File.groovy");
shell.parse(new File(url.toURI));

失敗します(デバッグを有効にした CompilerConfiguration が事前に設定されています)。

したがって、私のスクリプトはクラスパスにあり、パッケージが割り当てられています。それらは両方で実行されます(ファイルを介して直接およびファイル+クラスローダーリソースを介して)-ただし、IDEデバッグはファイルリソースとして参照する場合にのみ機能します(相対!したがって、「間違った」src/main/groovy/プレフィックスを使用します.

参考までに - スクリプトは後で JAR ファイルに含める必要があり、アプリケーション全体が WAR として実行されます。

私が試すことができることについてのヒントはありますか?

ありがとう、よろしく、 ティモ

4

1 に答える 1

1

したがって、私が何を試しても(ファイル、URL、URIの間で-クラスローダーを直接使用する場合と使用しない場合)、少なくとも1つのケースで失敗しました:

  • WAR ランタイム (依存 JAR にある場合)
  • Maven から起動された単体テスト
  • IDE から起動された単体テスト

現在、3 つのケースすべてを管理する唯一の方法は、GroovyCodeSource を直接使用することです。

CompilerConfiguration cc = CompilerConfiguration.DEFAULT   
cc.setDebug(true)    
def shell = new GroovyShell(
    Thread.currentThread().getContextClassLoader(), 
    binding, 
    cc
)

scriptUrl = Thread.currentThread().getContextClassLoader().getResource(it);   
GroovyCodeSource gcs = new GroovyCodeSource(scriptUrl);

Script s = shell.parse(gcs);
s.run();
于 2013-04-16T11:45:16.910 に答える