I have upgraded from Maven 2.20 to 3.02, and I found many of my integration 
tests that used to pass are now failing because of a ClassCastException, which 
is an odd exception to find when no code has changed. I traced the issue to a 
classloader problem with Maven 3 that arises in another Java library (RESTEasy 
if you were wondering).

Here is their code:

try
      {
         Object delegate =
                 FactoryFinder.find(JAXRS_RUNTIME_DELEGATE_PROPERTY,
                         JAXRS_DEFAULT_RUNTIME_DELEGATE);
         if (!(delegate instanceof RuntimeDelegate))
         {
            Class pClass = RuntimeDelegate.class;
            String classnameAsResource = pClass.getName().replace('.', '/') + 
".class";
            ClassLoader loader = pClass.getClassLoader();
            if (loader == null)
            {
               loader = ClassLoader.getSystemClassLoader();
            }
            URL targetTypeURL = loader.getResource(classnameAsResource);
           throw new LinkageError("ClassCastException: attempting to cast" +
                    
delegate.getClass().getClassLoader().getResource(classnameAsResource) +
                    "to" + targetTypeURL.toString());
         }
         return (RuntimeDelegate) delegate;
      }
      catch (Exception ex)
      {
         throw new RuntimeException(ex);
      }

And here is my pom configuration:

<plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>failsafe-maven-plugin</artifactId>
                <version>2.4.3-alpha-1</version>
                <configuration>
                    <useSystemClassLoader>false</useSystemClassLoader>
                    <useManifestOnlyJar>false</useManifestOnlyJar>
                    <forkMode>once</forkMode>
                    <includes>
                        <include>**/CategoriesServiceDelegateIT.java</include>
                    </includes>
                </configuration>
                <executions>
                    <execution>
                        <id>integration-test</id>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>verify</id>
                        <goals>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
</plugin>

When I set useSystemClassLoader to true, the ClassCastException goes away, but 
then nothing happens except for a hard exit. I see nothing in the logs or in 
failsafe-reports to tell me what happened.

Any insight into why things work in Maven 2.20 but not in 3.02 is appreciated.

Thanks.

Reply via email to