[英]eclipse plugin > java based project, how to
我在 eclipse 中制作了一个新插件,该插件添加了一个新项目条目,然后可用于添加新项目。
然而,当我去项目属性时,我得到了这个:
而不是这个:
所以,我的问题是,如何让我的项目也包括所有 java 东西(如:java 构建路径等......),因为我希望这个项目基于默认的 Z93F725A07423FE1C889ZD248 项目。
我目前是如何制作项目的(代码):
@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
但不完全。
这是我手动向项目添加构面时项目的外观(这就是我希望它的外观):
这就是当我以编程方式添加自然 ID“org.eclipse.jdt.core.javanature”时它的实际外观(不是我想要的)
所以......如何解决这个问题? 我需要另一种性质吗?
这是我手动添加构面时的.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>
还添加了 file.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();
}
}
您创建的项目缺少 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());
干杯,马克斯
在不更改插件的情况下,您可以将 Java 方面添加到新项目中。 查看“项目构面”设置,如有必要,将项目转换为构面形式,并将 select Java 作为构面使用。 这应该启用您正在寻找的设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.