2011-07-12 4 views
4

J'ai fait un nouveau plugin dans eclipse qui ajoute une nouvelle entrée de projet qui peut ensuite être utilisée pour ajouter un nouveau projet.eclipse plugin> projet java, comment

mais quand va projeter les propriétés que je reçois ceci:

my project properties

au lieu de ceci:

java project properties

, ma question est, comment obtenir mon projet d'inclure également toutes les choses java (comme: java build path, etc ...), car je veux que ce projet soit basé sur le projet java par défaut.

comment je fais le projet est actuellement (code):

@Override 
public boolean performFinish() 
{ 
    if (project != null) 
    { 
     return true; 
    } 
    final IProject projectHandle = wizardPage.getProjectHandle(); 
    URI projectURI = (!wizardPage.useDefaults()) ? wizardPage.getLocationURI() : null; 
    IWorkspace workspace = ResourcesPlugin.getWorkspace(); 
    final IProjectDescription desc = workspace.newProjectDescription(projectHandle.getName()); 
    desc.setLocationURI(projectURI); 
    WorkspaceModifyOperation op = new WorkspaceModifyOperation() 
    { 
     protected void execute(IProgressMonitor monitor) throws CoreException 
     { 
      createProject(desc, projectHandle, monitor); 
     } 
    }; 
    try 
    { 
     getContainer().run(true, true, op); 
    } 
    catch (InterruptedException e) 
    { 
     return false; 
    } 
    catch (InvocationTargetException e) 
    { 
     Throwable realException = e.getTargetException(); 
     MessageDialog.openError(getShell(), "Error", realException.getMessage()); 
     return false; 
    } 
    project = projectHandle; 
    if (project == null) 
    { 
     return false; 
    } 
    BasicNewProjectResourceWizard.updatePerspective(config); 
    BasicNewProjectResourceWizard.selectAndReveal(project, workbench.getActiveWorkbenchWindow()); 
    return true; 
} 

modifier ***

ok donc la solution est d'ajouter une facette au projet. si je le fais manuellement après avoir créé un nouveau projet via mon plugin - à partir du clic droit, des propriétés du projet - cela fonctionne. comment ajouter cette facet programmatique?

modifier 2 ***

ok, il se fait via:

description.setNatureIds 

mais pas tout à fait.

voici comment le projet semble quand j'ajouter manuellement la facette (et voilà comment je veux regarder):

enter image description here

ce qui est la façon dont il semble en fait quand j'ajouter la nature id "org.eclipse.jdt.core.javanature" programmaticaly (pas comment je le veux)

enter image description here

alors ... comment résoudre ce problème? Ai-je besoin d'une autre nature?

ici est le contenu du fichier .project quand j'ajouter manuellement la facette:

<?xml version="1.0" encoding="UTF-8"?> 
<projectDescription> 
    <name>test</name> 
    <comment></comment> 
    <projects> 
    </projects> 
    <buildSpec> 
     <buildCommand> 
      <name>org.eclipse.jdt.core.javabuilder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
     <buildCommand> 
      <name>org.eclipse.wst.common.project.facet.core.builder</name> 
      <arguments> 
      </arguments> 
     </buildCommand> 
    </buildSpec> 
    <natures> 
     <nature>org.eclipse.wst.common.project.facet.core.nature</nature> 
     <nature>org.eclipse.jdt.core.javanature</nature> 
    </natures> 
</projectDescription> 

également le fichier .classpath est ajouté (lors de l'ajout facette manuellement, mais il n'y a pas de fichier quand il est ajouté programmaticaly) :

<?xml version="1.0" encoding="UTF-8"?> 
<classpath> 
    <classpathentry kind="src" path="src"/> 
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"> 
     <attributes> 
      <attribute name="owner.project.facets" value="java"/> 
     </attributes> 
    </classpathentry> 
    <classpathentry kind="output" path="bin"/> 
</classpath> 

ici est aussi ma méthode createProject():

private void createProject(IProjectDescription description, IProject proj, IProgressMonitor monitor) 
      throws CoreException, OperationCanceledException 
    { 
     try 
     { 
      monitor.beginTask("", 2000); 
      proj.create(description, new SubProgressMonitor(monitor, 10)); 
      if (monitor.isCanceled()) 
      { 
       throw new OperationCanceledException(); 
      } 
      proj.open(IResource.BACKGROUND_REFRESH, new SubProgressMonitor(monitor, 10)); 
      IContainer container = (IContainer) proj; 
      [ *** ] 
} 
     finally 
     { 
      monitor.done(); 
     } 
} 

Répondre

5

Votre projet créé ne contient pas les natures et constructeurs Java et WST.

desc.setNatureIds(new String[] {org.eclipse.jdt.core.JavaCore.NATURE_ID, "org.eclipse.wst.common.project.facet.core.nature"}); 
org.eclipse.core.resources.ICommand[] commands = new ICommand[] { desc.newCommand(), desc.newCommand }; 
commands[0].setBuilderName(org.eclipse.jdt.core.JavaCore.BUILDER_ID); 
commands[1].setBuilderName("org.eclipse.wst.common.project.facet.core.builder"); 
desc.setBuildSpec(commands); 

createProject(...) { 
... 
proj.create(description, ...); 
IFolder srcFolder = proj.getFolder(new Path("src")); 
srcFolder.create(false, true, new NullProgressMonitor()); 
org.eclipse.jdt.core.IJavaProject javaProject = org.eclipse.jdt.core.JavaCore.create(proj); 
org.eclipse.jdt.core.IClasspathEntry src = JavaCore.newSourceEntry(srcFolder.getFullPath()); 
IClasspathEntry jre = JavaCore.newContainerEntry(new Path(org.eclipse.jdt.launching.JavaRuntime.JRE_CONTAINER), new IAccessRule[0], new IClasspathAttribute[] { JavaCore.newClasspathAttribute("owner.project.facets", "java")}, false); 
IClasspathEntry[] entries = new IClasspathEntry[] { src, jre }; 
javaProject.setRawClasspath(entries, proj.getFullPath().append("bin"), new NullProgressMonitor()); 

Cheers, Max

+0

fonctionne, mais pas tout à fait, voir la question originale (j'ai mis des images là-bas;) pour une meilleure explication. – b0x0rz

+0

l'ai ajouté ... – b0x0rz

+0

quand je copie le fichier .classpath du projet de facette ajouté manuellement, au programmaticaly fait un, ceci le fixe, mais maintenant la question est comment ajouter le stuff dans .classpath programmaticaly aussi bien? J'espère que ce sera la dernière étape pour résoudre ce problème :) – b0x0rz

1

Witho En changeant votre plugin, vous pouvez ajouter la facette Java au nouveau projet. Jetez un coup d'œil au paramètre "Project Facets", convertissez le projet en facettes si nécessaire et sélectionnez Java comme facette à utiliser. Cela devrait activer les paramètres que vous recherchez.

+0

essayé manuellement dans le projet je l'ai fait, semble fonctionner - GRANDE. vous n'arriveriez pas à avoir un code sur la façon d'ajouter la facette programmatique? sinon, je me regarderai, bien sûr;) merci beaucoup. – b0x0rz

+0

Désolé, je ne suis pas si profond dans la programmation de plugins. – Daniel

Questions connexes