eclipse плагин> Java-проект, как - PullRequest
4 голосов
/ 12 июля 2011

Я сделал новый плагин в eclipse, который добавляет новую запись проекта, которая затем может быть использована для добавления нового проекта.

однако при переходе к свойствам проекта я получаю это:

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

изменить ***

хорошо, поэтому решение состоит в том, чтобы добавить аспект к проекту. если я делаю это вручную после создания нового проекта через мой плагин - из правой кнопки мыши, свойства проекта - это работает. как добавить этот аспект программно?

изменить 2 ***

хорошо, это делается через:

description.setNatureIds

но не совсем.

вот как выглядит проект, когда я вручную добавляю к нему фасет (а так я хочу, чтобы он выглядел):

enter image description here

и вот как это выглядит на самом деле, когда я программно добавляю идентификатор природы "org.eclipse.jdt.core.javanature" * не так, как я хочу)

enter image description here

так ... как это исправить? мне нужна другая природа?

Вот содержимое файла .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();
        }
}

Ответы [ 2 ]

5 голосов
/ 14 июля 2011

В созданном вами проекте отсутствует природа и компоновщики 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());

Приветствия, Макс.

1 голос
/ 12 июля 2011

Не изменяя свой плагин, вы можете добавить аспект Java в новый проект.Взгляните на настройку «Фасеты проекта», при необходимости преобразуйте проект в граненую форму и выберите Java для использования.Это должно включить настройки, которые вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...