maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Andrew Schurman (JIRA)" <j...@codehaus.org>
Subject [jira] (MINVOKER-182) Different groovy versions on test classpath can cause ClassCastException
Date Mon, 16 Feb 2015 00:55:18 GMT

    [ https://jira.codehaus.org/browse/MINVOKER-182?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=363317#comment-363317
] 

Andrew Schurman commented on MINVOKER-182:
------------------------------------------

As a not-so-nice workaround, one can add a test-scoped version of groovy that invoker is using
to swap out the groovy version of the dependency. This won't help if you do depend on API
in that version of groovy which is missing from the one invoker is using.

> 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)

Mime
View raw message