Я сделал новый плагин в eclipse, который добавляет новую запись проекта, которая затем может быть использована для добавления нового проекта.
однако при переходе к свойствам проекта я получаю это:
![my project properties](https://i.stack.imgur.com/mLI8k.jpg)
вместо этого:
![java project properties](https://i.stack.imgur.com/Ou7VI.jpg)
Итак, мой вопрос заключается в том, как сделать так, чтобы в мой проект были включены все 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;
}
изменить ***
хорошо, поэтому решение состоит в том, чтобы добавить аспект к проекту. если я делаю это вручную после создания нового проекта через мой плагин - из правой кнопки мыши, свойства проекта - это работает.
как добавить этот аспект программно?
изменить 2 ***
хорошо, это делается через:
description.setNatureIds
но не совсем.
вот как выглядит проект, когда я вручную добавляю к нему фасет (а так я хочу, чтобы он выглядел):
![enter image description here](https://i.stack.imgur.com/GQA9P.jpg)
и вот как это выглядит на самом деле, когда я программно добавляю идентификатор природы "org.eclipse.jdt.core.javanature" * не так, как я хочу)
![enter image description here](https://i.stack.imgur.com/UKbBV.jpg)
так ... как это исправить? мне нужна другая природа?
Вот содержимое файла .project, когда я вручную добавляю фасет:
<?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 (при добавлении фасета вручную, но при программном добавлении такого файла нет):
<?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();
}
}