On 13/10/2010, at 5:42 PM, David Resnick wrote:

> I'm trying to declare a ProjectEvaluationListener in an init script
> and have encountered what looks like might be a bug. The same class
> declaration in a non-init script compiles fine.

It certainly is a bug. It's fixed in head now.

The problem happens when the script contains only one or more class 
definitions. If it contains any statements or methods, the script will compile 
fine. And an init script with no statements is not much use.


> 
> Please see below for init script and command line/output.
> 
> Thanks for your help!
> 
> -David
> 
> gradle/init.gradle:
> class AListener implements ProjectEvaluationListener {
>       void beforeEvaluate(org.gradle.api.Project project) {
>       }
>       void afterEvaluate(org.gradle.api.Project project,
> org.gradle.api.ProjectState projectState) {
>       }
> }
> 
> Output when trying to run:
> $ gradle -I gradle/init.gradle -s -C rebuild
> 
> FAILURE: Build failed with an exception.
> 
> * Where:
> Initialization script '/usr/proj/gradle/init.gradle' line: 7
> 
> * What went wrong:
> Could not compile initialization script '/usr/proj/gradle/init.gradle'.
> Cause: startup failed:
> init_gradle_aa63cc11a41268d5d2c4001e7c918ac8: 7: Can't have an
> abstract method in a non-abstract class. The class
> 'MoveBuildDirectoryListener' must be declared abstract or the method
> 'void afterEvaluate(org.gradle.api.Project,
> org.gradle.api.ProjectState)' must be implemented.
> @ line 7, column 1.
>   class MoveBuildDirectoryListener implements ProjectEvaluationListener {
>   ^
> 
> init_gradle_aa63cc11a41268d5d2c4001e7c918ac8: 7: Can't have an
> abstract method in a non-abstract class. The class
> 'MoveBuildDirectoryListener' must be declared abstract or the method
> 'void beforeEvaluate(org.gradle.api.Project)' must be implemented.
> @ line 7, column 1.
>   class MoveBuildDirectoryListener implements ProjectEvaluationListener {
>   ^
> 
> 2 errors
> 
> * Try:
> Run with -S option to get the full (very verbose) stacktrace.
> 
> * Exception is:
> org.gradle.api.LocationAwareScriptCompilationException: Initialization
> script '/usr/proj/gradle/init.gradle' line: 7
> Could not compile initialization script '/usr/proj/gradle/init.gradle'.
>        at 
> org.gradle.groovy.scripts.DefaultScriptCompilationHandler.compileScript(DefaultScriptCompilationHandler.java:112)
>        at 
> org.gradle.groovy.scripts.DefaultScriptCompilationHandler.compileToDir(DefaultScriptCompilationHandler.java:57)
>        at 
> org.gradle.groovy.scripts.CachingScriptCompilationHandler.compileToDir(CachingScriptCompilationHandler.java:33)
>        at 
> org.gradle.groovy.scripts.DefaultScriptCompilerFactory$ScriptCompilerImpl.loadViaCache(DefaultScriptCompilerFactory.java:90)
>        at 
> org.gradle.groovy.scripts.DefaultScriptCompilerFactory$ScriptCompilerImpl.compile(DefaultScriptCompilerFactory.java:69)
>        at 
> org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:114)
>        at 
> org.gradle.configuration.DefaultInitScriptProcessor.process(DefaultInitScriptProcessor.java:37)
>        at 
> org.gradle.initialization.InitScriptHandler.executeScripts(InitScriptHandler.java:40)
>        at 
> org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:125)
>        at 
> org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:107)
>        at 
> org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:75)
>        at org.gradle.launcher.Main.execute(Main.java:93)
>        at org.gradle.launcher.Main.main(Main.java:42)
>        at org.gradle.launcher.GradleMain.main(GradleMain.java:49)
> Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException:
> startup failed:
> init_gradle_aa63cc11a41268d5d2c4001e7c918ac8: 7: Can't have an
> abstract method in a non-abstract class. The class
> 'MoveBuildDirectoryListener' must be declared abstract or the method
> 'void afterEvaluate(org.gradle.api.Project,
> org.gradle.api.ProjectState)' must be implemented.
> @ line 7, column 1.
>   class MoveBuildDirectoryListener implements ProjectEvaluationListener {
>   ^
> 
> init_gradle_aa63cc11a41268d5d2c4001e7c918ac8: 7: Can't have an
> abstract method in a non-abstract class. The class
> 'MoveBuildDirectoryListener' must be declared abstract or the method
> 'void beforeEvaluate(org.gradle.api.Project)' must be implemented.
> @ line 7, column 1.
>   class MoveBuildDirectoryListener implements ProjectEvaluationListener {
>   ^
> 
> 2 errors
> 
>        at 
> org.gradle.groovy.scripts.DefaultScriptCompilationHandler.compileScript(DefaultScriptCompilationHandler.java:108)
>        ... 13 common frames omitted
> 
> BUILD FAILED
> 
> Total time: 0.982 secs
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>    http://xircles.codehaus.org/manage_email
> 
> 


--
Adam Murdoch
Gradle Developer
http://www.gradle.org
CTO, Gradle Inc. - Gradle Training, Support, Consulting
http://www.gradle.biz

Reply via email to