Andrew Schurman created MINVOKER-182:
----------------------------------------

             Summary: Different groovy versions on test classpath can cause 
ClassCastException
                 Key: MINVOKER-182
                 URL: https://jira.codehaus.org/browse/MINVOKER-182
             Project: Maven Invoker Plugin
          Issue Type: Bug
    Affects Versions: 1.8
            Reporter: Andrew Schurman
            Priority: Minor


When {{addTestClassPath}} is set and you have a different version of groovy 
than invoker on your classpath, you will run into {{ClassCastException}} when
pre-/post- build hooks are run for tests. This occurs due to invoker creating 
groovy scripts in its version of groovy, but using a different version of 
groovy as the runtime (since test classpath elements are loaded first when 
{{addTestClassPath=true}}).

In my specific case, I had a transitive dependency on groovy 1.7, but invoker 
uses groovy 2.0. Being transitive does make it harder to spot, but
more importantly you may not have access to the dependency that depends on 
groovy. This could make swapping groovy versions impossible depending on the 
gap between versions.

Stack trace:
{code}
groovy.lang.GroovyRuntimeException: Failed to create Script instance for class: 
class Script1. Reason: java.lang.ClassCastException: Script1 cannot be
 cast to groovy.lang.GroovyObject
        at 
org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:443)
        at groovy.lang.GroovyShell.parse(GroovyShell.java:625)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:516)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:556)
        at groovy.lang.GroovyShell.evaluate(GroovyShell.java:527)
        at 
org.apache.maven.shared.scriptinterpreter.GroovyScriptInterpreter.evaluateScript(GroovyScriptInterpreter.java:83)
        at 
org.apache.maven.shared.scriptinterpreter.ScriptRunner.executeRun(ScriptRunner.java:249)
        at 
org.apache.maven.shared.scriptinterpreter.ScriptRunner.run(ScriptRunner.java:177)
        at 
org.apache.maven.plugin.invoker.AbstractInvokerMojo.runBuild(AbstractInvokerMojo.java:1692)
        at 
org.apache.maven.plugin.invoker.AbstractInvokerMojo.runBuild(AbstractInvokerMojo.java:1360)
        at 
org.apache.maven.plugin.invoker.AbstractInvokerMojo.runBuilds(AbstractInvokerMojo.java:1210)
        at 
org.apache.maven.plugin.invoker.AbstractInvokerMojo.execute(AbstractInvokerMojo.java:723)
        at 
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at 
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at 
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at 
org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at 
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at 
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: java.lang.ClassCastException: Script1 cannot be cast to 
groovy.lang.GroovyObject
        at 
org.codehaus.groovy.runtime.InvokerHelper.createScript(InvokerHelper.java:421)
        ... 32 more
{code}



--
This message was sent by Atlassian JIRA
(v6.1.6#6162)

Reply via email to