2011-07-10 16 views
7

Şu kodum varEclipse projesi IJavaProject'e gönderilemez

 IJavaProject targetProject = null; 
    IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 
    for (IProject project : root.getProjects()) { 
     if (project.getName().equals(projName)) { 
      try { 
       if (project.hasNature("org.eclipse.jdt.core.javanature")) { 
        targetProject = (IJavaProject) project; 
       } 
      } catch(...) { 
      // etc ... 
      } 

Yapmaya çalıştığım şey aslında bir IJavaProject olarak belirli bir isimle eşleşen bir proje döndürmektir. Gördüğünüz gibi, söz konusu projenin bir java niteliğine sahip olduğundan emin olmak için aşağıdakileri kontrol ediyorum:

if (project.hasNature("org.eclipse.jdt.core.javanature")) { 

Ne yazık ki, bir 'ClassCaseException' ifadesini

java.lang.ClassCastException: 
    org.eclipse.core.internal.resources.Project cannot be cast to org.eclipse.jdt.core.IJavaProject 

olarak görüyorum. Bir IProject bir java niteliğine sahip olduğunda, bir IJavaProject'e dökülebilir. Servis mevcut olmadığında JDZ Core API'ye erişim sağlayamıyorum here.

cevap

21

Cevabınızdaki kod çalışmaz (yazım hatası). Burada bir IJavaProject oluşturabilirsiniz nasıl:

import org.eclipse.jdt.core.JavaCore 
... 
    if (project.hasNature(JavaCore.NATURE_ID)) { 
     targetProject = JavaCore.create(project); 
    } 

IProject Eclipse Kaynakları API türüdür ve IJavaProject Eclipse Java Modeli türüdür. Aynı soyutlamalar değildir, ancak tüm IJavaProjects bir IProject var.

+0

Evet, bir tür;) – Joeblackdev