You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Martin Todorov (JIRA)" <ji...@apache.org> on 2016/06/05 15:48:59 UTC

[jira] [Comment Edited] (MINVOKER-182) Different groovy versions on test classpath can cause ClassCastException

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

Martin Todorov edited comment on MINVOKER-182 at 6/5/16 3:48 PM:
-----------------------------------------------------------------

I am getting this as well with:
{code}
mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /java/apache/maven-3.3.9
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: /java/jdk1.8.0_65/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.5.0-6-default", arch: "amd64", family: "unix"
{code}

Plugin configuration:
{code}
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-invoker-plugin</artifactId>
                        <version>2.0.0</version>

                        <configuration>
                            <debug>true</debug>
                            <preBuildHookScript>clean</preBuildHookScript>
                            <postBuildHookScript>verify</postBuildHookScript>
                            <settingsFile>src/it/settings.xml</settingsFile>
                            <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
                            <addTestClassPath>true</addTestClassPath>
                        </configuration>

                        <executions>
                            <execution>
                                <id>invoker-integration-tests</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>

                                <phase>test</phase>
                            </execution>
                        </executions>

                        <dependencies>
                            <dependency>
                                <groupId>org.codehaus.groovy</groupId>
                                <artifactId>groovy-all</artifactId>
                                <version>2.4.6</version>
                            </dependency>
                        </dependencies>
                    </plugin>
{code}

I also have:
{code}
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.6</version>
            <scope>test</scope>
        </dependency>
{code}

And that doesn't seem to help.

Is there a way around this? I mean, this was all working fine for our project till a few days ago. There have been no changes to the said project in a long while and the code was running these integration tests just fine for a long time (we're using the {{maven-invoker-plugin}} to simulate Maven behavior against another project, so our CI was set up to invoke these test when there were changes to the other project).

I've also posted this on Stackoverflow, as I wasn't initially sure whether it was a bug, or not:
- http://stackoverflow.com/questions/37642843/weird-maven-invoker-plugin-exception-java-lang-classcastexception-script1-cann

From the discussion in this bug report and [this discussion|http://maven.40175.n5.nabble.com/Maven-invoker-plugin-addTestClassPath-failing-but-manually-adding-as-dependency-works-td5843422.html], I am under the impression that other people have been able to find a workaround, but adding the {{groovy-all}} dependency doesn't seem to be making a difference in my case at all.

Please advise!


was (Author: carlspring):
I am getting this as well with:
{code}
mvn --version
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-10T16:41:47+00:00)
Maven home: /java/apache/maven-3.3.9
Java version: 1.8.0_65, vendor: Oracle Corporation
Java home: /java/jdk1.8.0_65/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "4.5.0-6-default", arch: "amd64", family: "unix"
{code}

Plugin configuration:
{code}
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-invoker-plugin</artifactId>
                        <version>2.0.0</version>

                        <configuration>
                            <debug>true</debug>
                            <preBuildHookScript>clean</preBuildHookScript>
                            <postBuildHookScript>verify</postBuildHookScript>
                            <settingsFile>src/it/settings.xml</settingsFile>
                            <cloneProjectsTo>${project.build.directory}/it</cloneProjectsTo>
                            <addTestClassPath>true</addTestClassPath>
                        </configuration>

                        <executions>
                            <execution>
                                <id>invoker-integration-tests</id>
                                <goals>
                                    <goal>run</goal>
                                </goals>

                                <phase>test</phase>
                            </execution>
                        </executions>

                        <dependencies>
                            <dependency>
                                <groupId>org.codehaus.groovy</groupId>
                                <artifactId>groovy-all</artifactId>
                                <version>2.4.6</version>
                            </dependency>
                        </dependencies>
                    </plugin>
{code}

I also have:
{code}
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.6</version>
            <scope>test</scope>
        </dependency>
{code}

And that doesn't seem to help.

Is there a way around this? I mean, this was all working fine for our project till a few days ago. There have been no changes to the said project in a long while and the code was running these integration tests just fine for a long time (we're using the {{maven-invoker-plugin}} to simulate Maven behavior against another project, so our CI was set up to invoke these test when there were changes to the other project).

> Different groovy versions on test classpath can cause ClassCastException
> ------------------------------------------------------------------------
>
>                 Key: MINVOKER-182
>                 URL: https://issues.apache.org/jira/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.3.4#6332)