[ http://jira.codehaus.org/browse/MINVOKER-112?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
luke w patterson updated MINVOKER-112: -------------------------------------- Attachment: script-classpath-duplicates-fix.patch (attaching fix patch) Here's a small, clean patch to fix the issue. It simply removes any class path entries that are duplicated. Like I mentioned earlier, the logic could probably be smarter, and could try to merge the dependencies using GAV awareness, but this is a good start for now. This patch fixes situations that would otherwise be clearly wrong (two of same jars on classpath). I don't think it could cause any passivity issues later if the logic was made more robust. > duplicate script classpath entries are not filtered out, can cause > ClassCastException > ------------------------------------------------------------------------------------- > > Key: MINVOKER-112 > URL: http://jira.codehaus.org/browse/MINVOKER-112 > Project: Maven 2.x Invoker Plugin > Issue Type: Bug > Reporter: luke w patterson > Attachments: script-classpath-duplicates-fix.patch, > script-classpath-duplicates-it.patch > > > (it test case attached) > when addTestClassPath > http://maven.apache.org/plugins/maven-invoker-plugin/run-mojo.html#addTestClassPath > is set to "true" but the consuming project also depends on groovy or > beanshell, scripts fail with ClassCastException, > because the jars end up on the classpath twice > error example: > {noformat} > 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:432) > at groovy.lang.GroovyShell.parse(GroovyShell.java:584) > at groovy.lang.GroovyShell.parse(GroovyShell.java:564) > at groovy.lang.GroovyShell.evaluate(GroovyShell.java:542) > at groovy.lang.GroovyShell.evaluate(GroovyShell.java:518) > at > org.apache.maven.plugin.invoker.GroovyScriptInterpreter.evaluateScript(GroovyScriptInterpreter.java:83) > {noformat} > I created a fix locally, but it's rough right now. Will polish it up and > submit later. Basically, it adds > {code} > /** > * @parameter expression="${plugin.artifacts}" > * @required > * @readonly > */ > private List pluginArtifacts; > {code} > to AbstractInvokerMojo, and then spins through the Artifacts, retrieving > their file paths, and removes those from the list sent to > "scriptRunner.setClassPath" > Granted, the proposed fix could be smarter, cause it only filters out exact > matches, but it's better than the current behavior. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira