Eclipse 高级脚本环境 (EASE) 项目是一组新的、强大的插件,可以让你快速“黑”你的 Eclipse IDE。
Eclipse 是一个强大的框架,可以通过其内置的插件机制以多种不同的方式进行扩展。然而,如果你只想添加一些额外的功能,编写和部署一个新的插件可能会很麻烦。 现在,使用 EASE,有一种更好的方法可以做到这一点,而无需编写一行 Java 代码。 EASE 提供了一种使用诸如 Python 或 Javascript 之类的脚本语言轻松自动化工作台功能的方法。
在本文中,基于我在今年 EclipseCon 北美会议上的演讲,我将介绍如何使用 Python 和 EASE 设置你的 Eclipse 环境的基础知识,并探索一些使用 Python 的强大功能来增强你的 IDE 的想法。
设置并运行“Hello World”
本文中的示例基于 Python 的 Java 实现,Jython。 你可以将 EASE 直接安装到你现有的 Eclipse IDE 中。 在这个例子中,我们使用 Eclipse Mars 并安装 EASE 本身、其模块和 Jython 引擎。
在 Eclipse 安装对话框(Help>Install New Software...)中,安装 EASE:http://download.eclipse.org/
并且,选择以下组件
- EASE Core feature(EASE 核心功能)
- EASE core UI feature(EASE 核心 UI 功能)
- EASE Python Developer Resources(EASE Python 开发者资源)
- EASE modules (Incubation)(EASE 模块(孵化))
这将给你 EASE 及其模块。我们最感兴趣的是 Resource 模块,它让你能够访问 Eclipse 工作区、项目和文件 API。
成功安装这些插件后,接下来安装 EASE Jython 引擎:https://dl.bintray.com/
print "hello world"
选择该文件,右键单击,然后选择“Run as -> EASE script”。 你应该会在控制台中看到“Hello World”出现。
现在你可以开始编写可以访问工作区和项目的 Python 脚本了。 这种能力可以用于各种各样的“黑客”行为,下面只是一些想法。
提高你的代码质量
维护良好的代码质量可能是一项繁琐的工作,尤其是在处理大型代码库或涉及大量开发人员时。 使用脚本可以更容易地减轻一些痛苦,例如对一组文件进行批量格式化,甚至修复某些文件以删除 unix 行尾符,以便在 git 等源代码控制系统中进行轻松比较。 另一件不错的事情是使用脚本生成 Eclipse 标记来突出显示可能需要改进的代码。 这是一个示例脚本,你可以使用它为所有在 Java 文件中检测到的“printStackTrace”方法添加任务标记。 查看源代码:markers.py
要运行,请将文件复制到你的工作区,然后右键单击并选择“Run as -> EASE script”。
loadModule('/System/Resources')
from org.eclipse.core.resources import IMarker
for ifile in findFiles("*.java"):
file_name = str(ifile.getLocation())
print "Processing " + file_name
with open(file_name) as f:
for line_no, line in enumerate(f, start=1):
if "printStackTrace" in line:
marker = ifile.createMarker(IMarker.TASK)
marker.setAttribute(IMarker.TRANSIENT, True)
marker.setAttribute(IMarker.LINE_NUMBER, line_no)
marker.setAttribute(IMarker.MESSAGE, "Fix in Sprint 2: " + line.strip())
如果你有任何带有 printStackTraces 的 java 文件,你将能够在 Tasks 视图和编辑器边距中看到新创建的标记。
自动化繁琐的任务
当你使用多个项目时,你可能希望自动化一些繁琐的重复性任务。 也许你需要将版权标头添加到每个源文件的开头,或者在采用新框架时更新源文件。 例如,当我们第一次切换到使用 Tycho 和 Maven 时,我们必须向每个项目添加 pom.xml。 使用几行 Python 代码很容易做到这一点。 然后,当 Tycho 提供对无 pom 构建的支持时,我们想要删除不必要的 pom 文件。 同样,几行 Python 脚本就可以实现这一点。 举个例子,这是一个脚本,它将一个 README.md 文件添加到你的工作区中的每个打开的项目中,并注明它们是 Java 还是 Python 项目。 查看源代码:add_readme.py。
要运行,请将文件复制到你的工作区,然后右键单击并选择“Run as -> EASE script”。
loadModule('/System/Resources')
for iproject in getWorkspace().getProjects():
if not iproject.isOpen():
continue
ifile = iproject.getFile("README.md")
if not ifile.exists():
contents = "# " + iproject.getName() + "\n\n"
if iproject.hasNature("org.eclipse.jdt.core.javanature"):
contents += "A Java Project\n"
elif iproject.hasNature("org.python.pydev.pythonNature"):
contents += "A Python Project\n"
writeFile(ifile, contents)
结果应该是每个打开的项目都将有一个 README.md 文件,Java 和 Python 项目都有一个额外的描述行。
原型新功能
你还可以使用 Python 脚本为某些非常需要的功能快速修复,或者作为原型来帮助向你的团队或用户展示你如何设想一个功能。 例如,Eclipse IDE 当前不支持的一项功能是在你正在处理的当前文件上自动保存。 尽管此功能正在为将来的版本开发中,但你可以拥有一个快速而粗糙的版本,该版本每 30 秒或在编辑器停用时自动保存。 以下是 main 方法的代码段。 查看完整源代码:autosave.py
def save_dirty_editors():
workbench = getService(org.eclipse.ui.IWorkbench)
for window in workbench.getWorkbenchWindows():
for page in window.getPages():
for editor_ref in page.getEditorReferences():
part = editor_ref.getPart(False)
if part and part.isDirty():
print "Auto-Saving", part.getTitle()
part.doSave(None)
在运行此脚本之前,你需要通过选中 Window > Preferences > Scripting 下的复选框来启用“Allow Scripts to run code in UI thread”设置。 然后你可以将文件添加到你的工作区,右键单击它并选择“Run As>EASE Script”。 每次保存编辑器时,都会在控制台视图中打印一条保存消息。 要关闭自动保存,只需按控制台视图中的“Terminate”红色方形按钮停止脚本即可。
使用自定义按钮、菜单等快速扩展用户界面
关于 EASE 最好的事情之一是它允许你将你的脚本快速连接到 IDE 的 UI 元素中,例如,作为新按钮或新菜单项。 无需编写 Java 或拥有新插件,只需在你的脚本标头中添加几行代码即可——就这么简单。
这是一个简单的脚本示例,它为我们创建了三个新项目。
# name : Create fruit projects
# toolbar : Project Explorer
# description : Create fruit projects
loadModule("/System/Resources")
for name in ["banana", "pineapple", "mango"]:
createProject(name)
注释行指定 EASE 向 Project Explorer 工具栏添加一个按钮。 这是另一个脚本,它向同一个工具栏添加一个按钮来删除这三个项目。 查看源代码文件:createProjects.py 和 deleteProjects.py
# name :Delete fruit projects
# toolbar : Project Explorer
# description : Get rid of the fruit projects
loadModule("/System/Resources")
for name in ["banana", "pineapple", "mango"]:
project = getProject(name)
project.delete(0, None)
要使按钮出现,请将这两个脚本文件添加到一个新项目中——我们称之为“ScriptsProject”。 然后转到 Windows > Preference > Scripting > Script Locations。 单击“Add Workspace”按钮并选择 ScriptsProject。 此项目现在成为查找脚本文件的默认位置。 你应该会在 Project Explorer 中看到按钮显示,而无需重新启动你的 IDE。 你应该能够使用你新添加的按钮快速创建和删除项目。
与第三方工具集成
时不时地你可能需要使用 Eclipse 生态系统之外的工具(令人难过但这是事实,它有很多但它并非无所不能)。 对于这些情况,将对该工具的调用包装在脚本中可能非常方便。 这是一个允许你与 explorer.exe 集成的示例,并将其添加到上下文菜单,以便你可以使用当前选择立即打开文件浏览器。 查看源代码:explorer.py
# name : Explore from here
# popup : enableFor(org.eclipse.core.resources.IResource)
# description : Start a file browser using current selection
loadModule("/System/Platform")
loadModule('/System/UI')
selection = getSelection()
if isinstance(selection, org.eclipse.jface.viewers.IStructuredSelection):
selection = selection.getFirstElement()
if not isinstance(selection, org.eclipse.core.resources.IResource):
selection = adapt(selection, org.eclipse.core.resources.IResource)
if isinstance(selection, org.eclipse.core.resources.IFile):
selection = selection.getParent()
if isinstance(selection, org.eclipse.core.resources.IContainer):
runProcess("explorer.exe", [selection.getLocation().toFile().toString()])
要使菜单出现,请将脚本添加到一个新项目中——我们称之为“ScriptsProject”。 然后转到 Windows > Preference > Scripting > Script Locations。 单击“Add Workspace”按钮并选择 ScriptsProject。 当你右键单击文件时,你会在上下文菜单中看到新的菜单项显示。 选择此操作以调出文件浏览器。(请注意,此功能已经存在于 Eclipse 中,但此示例是你可能适用于其他第三方工具的一个示例)。
Eclipse 高级脚本环境提供了一种通过利用 Python 的强大功能来充分利用你的 Eclipse IDE 的绝佳方式。 这是一个处于起步阶段的项目,因此还有很多东西要来。 了解更多关于该项目的信息并通过注册论坛参与其中。
我将在Eclipsecon 北美 2016 上更多地谈论 EASE。我的演讲使用 Python 编写 Eclipse 脚本 将深入探讨你如何不仅可以使用 Jython,还可以使用 C-Python,以及如何专门为科学用例扩展此功能。
2 条评论