2010年4月4日日曜日

日本語コメントを入れると何故か(ry、再び。

しばらく鳴りを潜めていた例のエラーがまた出始めた。
ソースファイルのエンコードについては確認済。UTF-8でBOMはなし。
今度はpackage-plugin。テストとかrun-appでは動くくせに、package-pluginしようとするとエラーを吐く。
今回出たエラーはこんな感じ(長いので途中で省略)。

Running script C:\grails-1.2.1\scripts\PackagePlugin_.groovy
Environment set to development
[echo] Compiling plugin descriptor...
startup failed, D:\work\grails\es-common-mail\EsCommonMailGrailsPlugin.groovy: 193: unexpected token: } @ line 193, column 1.
}
^

1 error

org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed,
D:\work\flack\grails\es-common-mail\EsCommonMailGrailsPlugin.groovy: 193: unexpected token: } @ line 193, column 1.
}
^

1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:296)
at org.codehaus.groovy.control.ErrorCollector.addFatalError(ErrorCollector.java:143)
at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:113)
at org.codehaus.groovy.control.ErrorCollector.addError(ErrorCollector.java:125)
at org.codehaus.groovy.control.SourceUnit.addError(SourceUnit.java:353)
at org.codehaus.groovy.antlr.AntlrParserPlugin.transformCSTIntoAST(AntlrParserPlugin.java:96)
at org.codehaus.groovy.antlr.AntlrParserPlugin.parseCST(AntlrParserPlugin.java:63)
at org.codehaus.groovy.control.SourceUnit.parse(SourceUnit.java:249)
at org.codehaus.groovy.control.CompilationUnit$1.call(CompilationUnit.java:163)
at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:820)
at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:513)
at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:489)
at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:466)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:279)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:250)
at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:189)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

 :
 :
 :

Error executing script PackagePlugin: : Cannot instantiate plugin file
gant.TargetExecutionException: : Cannot instantiate plugin file
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:331)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy:334)
at gant.Gant$_dispatch_closure6.doCall(Gant.groovy)
at gant.Gant.withBuildListeners(Gant.groovy:344)
at gant.Gant.this$2$withBuildListeners(Gant.groovy)
at gant.Gant$this$2$withBuildListeners.callCurrent(Unknown Source)
at gant.Gant.dispatch(Gant.groovy:334)
at gant.Gant.this$2$dispatch(Gant.groovy)
at gant.Gant.invokeMethod(Gant.groovy)
at gant.Gant.processTargets(Gant.groovy:495)
at gant.Gant.processTargets(Gant.groovy:480)
Caused by: : Cannot instantiate plugin file
at org.apache.tools.ant.taskdefs.Exit.execute(Exit.java:142)
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106)
at org.apache.tools.ant.Task.perform(Task.java:348)
at _PluginDependencies_groovy$_run_closure7.doCall(_PluginDependencies_groovy:472)
at _PluginDependencies_groovy$_run_closure7.call(_PluginDependencies_groovy)
at _GrailsPluginDev_groovy$_run_closure1.doCall(_GrailsPluginDev_groovy:78)
at gant.Gant$_dispatch_closure4.doCall(Gant.groovy:324)
... 10 more
Error executing script PackagePlugin: : Cannot instantiate plugin file


unexpected tokenとあるけど、かっこの閉じ忘れとかではない。
今回も日本語のコメント末尾に半角スペースとか入れると再現しなくなる。
対処法としては、コメント末尾に必ず半角スペースを入れる、コメントを//で書かずに/* */で書く(両端に半角SP入れる)、そもそも日本語でコメント書かないといったところか。…うわ、何そのバッドノウハウ。

これ、どうもスクリプト実行周り(自作スクリプトとか、package-pluginとか)でコンパイルやったときにのみ再現してるっぽいんだよなぁ…やっぱバグ?
でも、他でこの現象発生したって話は聞いたことないんだよなぁ…割と致命的な現象っぽいから、本当にバグなら話題に昇っててもおかしくなさげなんだけれども。
そう考えると、バグではなくこっちの設定不備という可能性も。…でも、そんな変なことやってないはずなんだけどなぁ…。

0 件のコメント: