【发布时间】:2016-12-16 11:30:45
【问题描述】:
我正在开发一个 Eclipse 插件,我试图通过向导从用户那里获取输入。
在向导中按下完成按钮后,我正在使用IWorkspace、IProject 等接口在工作区中创建一个项目。
我想将现有文件夹(可能进一步包含子文件夹和文件)复制到新创建的项目中,并在工作区中显示。该文件夹不是 Eclipse 项目。
有什么办法吗?
【问题讨论】:
标签: java eclipse eclipse-plugin
我正在开发一个 Eclipse 插件,我试图通过向导从用户那里获取输入。
在向导中按下完成按钮后,我正在使用IWorkspace、IProject 等接口在工作区中创建一个项目。
我想将现有文件夹(可能进一步包含子文件夹和文件)复制到新创建的项目中,并在工作区中显示。该文件夹不是 Eclipse 项目。
有什么办法吗?
【问题讨论】:
标签: java eclipse eclipse-plugin
quick-and-dirty 解决方案会将现有文件夹(及其所有内容)复制到项目位置下方的所需位置,然后刷新项目。
例如:
IProject project = ...
IPath location = project.getLocation();
Files.copy( pathToExistingFolder, location.toFile().toPath() );
project.refreshLocal( IResource.DEPTH_INFINITE, null );
更适当的解决方案将遍历现有文件夹并创建其中找到的每个文件和文件夹的副本。
要创建一个新文件,请使用
IProject project = ...
IFile file = project.getFile( "path/relative/to/prooject" );
file.create( inputStream, IResource.NONE, null );
// or, to override and existing file (file.eists() == true):
file.setContents( inputStream, IResource.NONE, null );
inputStream 假定由现有文件夹中当前遍历的文件支持。
要创建一个新文件夹,请使用
IProject project = ...
IFolder folder = project.getFolder( "path/relative/to/prooject" );
folder.create( IResource.NONE, true, null );
我进一步假设您现有的文件最终将存储在(jared)插件中。在这种情况下,后一种方法是唯一可行的,因为它允许您从插件存储中提供文件夹结构和文件内容。
Plugin Development Environment (PDE) 为manage and execute templates during project-creation 提供扩展点和 API。虽然您当然不想依赖 PDE 中的插件,但您可能需要查看源代码:https://github.com/eclipse/eclipse.pde.ui/tree/master/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/templates
【讨论】:
Path - 这必须是java.nio.file.Path 而不是org.eclipse.core.runtime.Path。