我在Eclipse中有一个XText项目,实现了我自己的语法文件。使用doGenerate函数,我生成了几个.java文件。到目前为止,一切都像一种魅力。
我的问题是,每次我生成文件时,我都需要做以下操作:
- 将生成的文件复制到我的Eclipse项目目录
- 在Eclipse中创建一个新的Java项目
- 将生成的文件导入项目
我希望每次调用doGenerate函数时都能自动执行这些步骤中的任何一个或全部,那么有没有办法用xtend/java代码来实现这一点?我应该提到的是,我的语法要求用户指定项目目录+名称,这样在运行时就可以从doGenerate函数中获得信息。
代码最好能够检测是否已经存在具有相同名称的项目,并在运行时更新打开的Eclipse实例中的内容(如果可能的话)。
或者,如果用xtend/java无法做到这一点,可以用插件做到吗?
创建新项目必须通过eclipse的资源API完成。如果你可以,在你的代码生成器中有这个依赖项,你可以简单地向org.eclipse.core.resources添加一个依赖项,然后做一些类似的事情
ResourcesPlugin.getWorkspace().getRoot().getProject("myProject").create(null)
如果您不想要这种依赖关系,因为您从其他环境(例如Maven)运行代码生成器,您需要将项目创建抽象到自己的类中,注入它,并为Eclipse和非Eclipse提供单独的实现。
Xtext(IFileSystemAccess)的代码生成器API将在后台使用Eclipse资源API,以确保所有通知等按预期工作,并且不需要手动刷新。因此,这里不需要不同的实现,因为Xtext会处理好这一点。