0

私はGroovyが初めてで、GStringTemplateEngineを使用してJBoss 5.1でいくつかのgroovyスクリプトを実行しようとしました

私のローカル開発環境ではすべて正常に動作しますが、別のチームが管理する開発サーバーに移動すると失敗します。

例外が具体的にスローされることがわかりました

try {
    groovyClass = loader.parseClass(new GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy", "x"));
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}

GStringTemplateEngine.class の 190 行目

例外メッセージは

groovy.lang.GroovyRuntimeException: startup failed:
General error during class generation: URI is not hierarchical

java.lang.IllegalArgumentException: URI is not hierarchical
    at java.io.File.<init>(File.java:363)
    at org.jboss.net.protocol.file.FileURLConnection.<init>(FileURLConnection.java:62)
    at org.jboss.net.protocol.file.Handler.openConnection(Handler.java:40)
    at java.net.URL.openConnection(URL.java:945)
    at java.net.URLClassLoader.getPermissions(URLClassLoader.java:474)
    at groovy.lang.GroovyClassLoader.getPermissions(GroovyClassLoader.java:335)
    at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:235)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
    at groovy.lang.GroovyClassLoader.access$300(GroovyClassLoader.java:55)
    at groovy.lang.GroovyClassLoader$ClassCollector.createClass(GroovyClassLoader.java:475)
    at groovy.lang.GroovyClassLoader$ClassCollector.onClassNode(GroovyClassLoader.java:492)
    at groovy.lang.GroovyClassLoader$ClassCollector.call(GroovyClassLoader.java:496)
    at org.codehaus.groovy.control.CompilationUnit$14.call(CompilationUnit.java:792)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1024)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:562)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:540)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:517)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:283)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:260)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:244)

階層エラーではない URI をスローする理由がわかりません。私はそれがパーミッションと関係があり、GroovyClassLoader が生成されたクラスを解析できないと仮定しています。

誰もこのエラーを見たことがありますか? 誰かが問題のデバッグ/修正に関する提案を提供できると助かります。

4

1 に答える 1

0

問題の本当の原因は不明ですが、回避策が見つかりました。

GStringTemplateEngine のコピーを作成し、置き換えました

try {
    groovyClass = loader.parseClass(new GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy", "x"));
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}

try {
    groovyClass = loader.parseClass(templateExpressions.toString(), "GStringTemplateScript" + counter.incrementAndGet() + ".groovy");
} catch (Exception e) {
    throw new GroovyRuntimeException("Failed to parse template script (your template may contain an error or be trying to use expressions not currently supported): " + e.getMessage());
}

GroovyCodeSource を削除し、代わりにテンプレート文字列を parseClass メソッドに渡しました。

于 2014-10-28T18:24:26.623 に答える