2011-07-12 18 views
4

我在eclipse中新增了一个插件,添加了一个新的项目条目,然后可以用来添加一个新的项目。eclipse插件>基于java的项目,如何

但是要项目属性,当我得到这个:

my project properties

,而不是这样的:

java project properties

所以,我的问题是,如何让我的项目还包括:所有的Java的东西(如:Java构建路径等),因为我想这个项目是基于默认的Java项目。

如何我想提出的项目正(代码):

@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; 
} 

编辑***

确定,所以该解决方案是将面添加到项目中。如果我通过我的插件创建一个新项目后做这个手册 - 从右键单击,项目属性 - 它的作品。 如何添加这个方面programmaticaly?

编辑2 ***

好了,所以它是通过做:

description.setNatureIds 

但并不完全。

这里是该项目的样子,当我手动添加的面给它(这是我希望它看起来):

enter image description here

,这是当我添加的性质如何,它实际上看起来ID “org.eclipse.jdt.core.javanature” programmaticaly(而不是如何我想它)

enter image description here

所以......如何解决呢?我需要另一种性质吗?

这里的项目文件内容时,我手动添加方面:

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

也文件的.classpath被添加(手动添加小的时候,但是当它被添加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> 

这里也是我的方法的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(); 
     } 
} 

回答

5

您创建的项目缺少Java和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()); 

干杯, 最大

+0

的作品,但不完全,看到原来的问题(我把图像在那里;)更好的解释。 – b0x0rz

+0

已将其添加到... – b0x0rz

+0

当我从手动添加的facet项目复制文件.classpath到programmaticaly创建的一个,这会修复它,但现在的问题是如何将这些东西添加到.classpath programmaticaly中?我希望这将是解决此问题的最后一步:) – b0x0rz

1
无覆盖

改变你的插件,你可以添加Java方面到新项目。查看“Project Facets”设置,如果需要将项目转换为分面形式,并选择Java作为要使用的方面。这应该启用您正在寻找的设置。

+0

在我所做的项目中手动试了一下,似乎工作 - GREAT。你不会碰巧有一个关于如何添加facet programmaticaly的代码?如果不是,我当然会看看自己;)无论如何,非常感谢。 – b0x0rz

+0

对不起,我对插件编程没有那么深入。 – Daniel

相关问题