Enable Maven in project causes ClassCastException
-------------------------------------------------

         Key: MNGECLIPSE-25
         URL: http://jira.codehaus.org/browse/MNGECLIPSE-25
     Project: Maven 2.x Plug-in for Eclipse
        Type: Bug

 Environment: WIN2K, Eclipse 3.1, JDK 1.5
    Reporter: Roland Klein
 Assigned to: Eugene Kuleshov 


Hello,

i encounter some problem with the eclipse plugin, when i enable Maven2 for a 
particular project.
In the eclipse log are three entries and one of them says that there is a 
ClassCastException in Maven2Builder.java line 52

52: Maven2ClasspathContainer container = ( Maven2ClasspathContainer ) 
JavaCore.getClasspathContainer( path, project );

sometimes i got a NPE in the same class line 54, then the variable container is 
not initialized.

54: JavaCore.setClasspathContainer( container.getPath(), new IJavaProject[] { 
project }, new IClasspathContainer[] { new Maven2ClasspathContainer( entries ) 
}, monitor );

After debugging i can say that the method JavaCore.getClasspathContainer() 
returns a JavaModelManager when you just started eclipse and causes the 
ClassCastExceptions, but I don't know if we can ignore it.

I tried to fix this problem, but i don't know the eclipse API very well. So i 
post it here in the hope someone can use and improve it.

Then i encounter a problem with MavenEmbedder and i changed the 
maven-embedder-2.0-beta-4-SNAPSHOT-dep.jar to maven-embedder-2.0.1-dep.jar and 
rebuild the plugin.
This problem occurs, everytime i change the pom.xml by hand then the project 
rebuilds but MavenEmbedder is still running and claims there is a duplicate 
projectId  in pom.xml. Then i inserted in 
Maven2Plugin.resolveClasspathEntries() a call to resetMavenEmbedder() before it 
is got through getMavenEmbedder(), this fixes the problem, but i thing this is 
shooting with canons on birds. Maybe there is a possibility to reset 
MavenEmbedder without to instantiate a new one.


<codesnippet Maven2Builder.build()>
// line 52-55 are replaced
//        Maven2ClasspathContainer container = ( Maven2ClasspathContainer ) 
JavaCore
//            .getClasspathContainer( path, project );

//        JavaCore.setClasspathContainer( container.getPath(), new 
IJavaProject[] { project },
//            new IClasspathContainer[] { new Maven2ClasspathContainer( entries 
) }, monitor );

        // ############### CHANGES ################
        IClasspathContainer icContainer = JavaCore.getClasspathContainer( path, 
project );

        IJavaProject[] projects = new IJavaProject[] { project };
        IPath newPath = null;
        IClasspathContainer[] classpathContainers = null;

        if( icContainer == null ) {
          newPath = new Path( Maven2Plugin.CONTAINER_ID );
          classpathContainers = new IClasspathContainer[] { new 
Maven2ClasspathContainer( entries ) };

          JavaCore.setClasspathContainer( newPath, projects, 
classpathContainers, monitor );

        } else {
          newPath = icContainer.getPath();
          if( icContainer instanceof Maven2ClasspathContainer ) {
            classpathContainers = new IClasspathContainer[] { new 
Maven2ClasspathContainer( entries ) };
            JavaCore.setClasspathContainer( newPath, projects, 
classpathContainers, monitor );

          } else {
            newPath = new Path( Maven2Plugin.CONTAINER_ID );
            classpathContainers = new IClasspathContainer[] { new 
Maven2ClasspathContainer( entries ) };

            JavaCore.setClasspathContainer( newPath, projects, 
classpathContainers, monitor );

          }
        }
        // ############### CHANGES ################
</codesnippet>

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


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to