Eclipse - 如何处理自定义项目创建

时间:2017-11-13 14:31:58

标签: java eclipse plugins customization

我想在我自己的Eclipse功能中开发功能来创建我自己的DSL语言的项目 - 换句话说,我想要有向导,所以我可以点击New > My Custom Project,然后填写向导页面中的所有必要字段然后,在执行Finish之后,我希望创建基本文件夹层次结构和模板文件,并添加我的DSL特性。我知道如何创建插件/功能,就像向导一样好。我可以用“硬编码”创建所有内容,我的意思是创建文件夹和文件,但也许有一些内置的解决方案来促进它?我找到了IProject界面的东西,这是一个很好的线索吗?

2 个答案:

答案 0 :(得分:1)

假设您的插件包含一个包含所有模板文件的子文件夹template,您可以将文件结构递归复制到新创建的项目中:

Bundle bundle = MyPlugin.getDefault().getBundle();
String templateFolderName = "template";
for (Enumeration entries = bundle.findEntries(templateFolderName, "*", true);
        entries.hasMoreElements();) {
    URL url = (URL) entries.nextElement();
    String path = url.getPath();
    if (!path.startsWith("/" + templateFolderName + "/"))
        throw new InvocationTargetException(
                new Throwable("Unknown template file: " + path));

    // create folder or file (overwrite if file already exists)
    String targetPath = path.substring(("/" + templateFolderName).length());
    if (path.endsWith("/")) {
        IFolder folder = project.getFolder(targetPath);
        if (! folder.exists()) {
            folder.create(false, true, null);
        }
    } else {
        InputStream in = url.openStream();
        IFile file = project.getFile(targetPath);
        if (file.exists()) {
            file.delete(true, null);
        }
        file.create(in, true, null);
    }
}

(参见source of the code snippet above

请参阅示例this implementation of a customized New Project wizard dialog

答案 1 :(得分:0)

我在Eclipse FAQ网站上找到了有趣的org.eclipse.core.resources。*库实现,它似乎有效。

    IWorkspace workspace = ResourcesPlugin.getWorkspace();
    IWorkspaceRoot root = workspace.getRoot();
    IProject project  = root.getProject("MyProject");
    IFolder folder = project.getFolder("Folder1");
    IFile file = folder.getFile("hello.txt");
    //at this point, no resources have been created
    if (!project.exists()) project.create(null);
    if (!project.isOpen()) project.open(null);
    if (!folder.exists()) 
        folder.create(IResource.NONE, true, null);
    if (!file.exists()) {
        byte[] bytes = "File contents".getBytes();
        InputStream source = new ByteArrayInputStream(bytes);
        file.create(source, IResource.NONE, null);
    }

这很简单,做得很好,可以轻松初始化项目的内容