Eclipse是一个强大的框架,可以通过内置的插件机制进行多种方式的扩展。但是,如果要增加一点额外的功能,大家就免不了要面对编写和部署新插件的工作,这显然有些头疼。现在有了EASE的帮助,我们可以用更理想的方式完成这个任务——而且整个过程不需要涉及任何Java代码的生成。EASE让我们可以很方便的使用Python或者JavaScript等脚本语言来实现自动化工作台的功能。在本文中,我们将共同了解如何使用Python和EASE来搭建Eclipse环境,并考虑多种可行的方法来使用Python来加强IDE解决方案。设置和运行“HelloWorld”今天文章中介绍的示例基于PythonJava实现,称为Jython。您可以将EASE直接安装到现有的EclipseIDE中。但在这个例子中,我们使用EclipseMars并安装EASE本体、它的模块和Jython引擎。在Eclipse安装对话框中(Help>InstallNewSoftware...),安装EASE:http://download.eclipse.org/ease/update/nightly接下来,检查以下组件:EASE核心功能(EASEcoreFunction)EASEcoreUIfeature(EASEcoreUIfeature)EASEPythonDeveloperResources(EASEPythondeveloperresources)EASEmodules(Incubation)(EASEmodule,incubation)这样,我们就可以使用EASE和它的各个模块了。我们在这里需要使用的主要是资源模块,它允许我们访问Eclipse工作区、项目和文件API。以上项目安装成功后,接下来需要安装EASEJython引擎:https://dl.bintray.com/pontesegger/ease-jython/。安装插件后,下一步就是测试EASE。创建一个新项目并使用以下命令添加一个名为hello.py的文件:print"helloworld"选择该文件,右键单击并选择“Runas->EASEscript”。这时,你会看到控制台显示“HelpWorld”。现在您可以开始编写可以访问工作区和项目的Python脚本。从这里开始,我们根据以下目标调整IDE。提高代码质量确保良好的代码质量是一项非常艰巨的任务,尤其是当代码库很大或涉及许多开发人员时。其中一些问题可以通过引入脚本轻松解决,比如批量格式化某些类型的文件,或者去掉git等源代码控制系统中的unix结尾行以简化文件内容比较等。另外值得强调的是,我们也可以使用脚本生成Eclipse标签,以代码高亮的形式实现功能的提升。以下脚本示例可用于为所有“printStackTrace”方法添加任务标记机制,从而启用Java文件内部检查。点击此链接查看源代码:首先复制工作区中的markers.py文件,然后右键点击相应文件,选择“Runas->EASEscript”。loadModule('/System/Resources')fromorg.eclipse.core.resourcesimportIMarkerforifileinfindFiles("*.java"):file_name=str(ifile.getLocation())print"Processing"+file_namewithopen(file_name)asf:forline_no,lineinenumerate(f,start=1):if"printStackTrace"inline:marker=ifile.createMarker(IMarker.TASK)marker.setAttribute(IMarker.TRANSIENT,True)marker.setAttribute(IMarker.LINE_NUMBER,line_no)marker.setAttribute(IMarker.MESSAGE,"FixinSprint2:"+line.strip())如果您已经有一个包含printStackTraces的部分Java文件,您可以在编辑器边缘的任务视图中看到新创建的标记。自动执行繁琐的任务当您同时处理多个项目时,您可能希望自动执行一些繁琐且重复的任务。您可能需要在每个源文件的开头添加版权标头,或者在采用新框架时更新源文件。例如,当我们第一次切换到Tycho和Maven时,我们需要为每个项目添加一个pom.xml文件。只需几行Python代码即可轻松完成此操作。但是由于Tycho目前不支持任何pom构建,我们需要删除这些不必要的pom文件。同样,几行Python脚本就可以实现这种吸引力。例如,这里我们使用下面的脚本为工作区中每个打开的项目添加一个README.md文件——当然,前提是它们属于Java或Python项目。点击以下链接查看源代码:add_readme.py。要运行这组脚本,请将文件复制到工作区,然后右键单击该文件并选择“运行方式->EASE脚本”。loadModule('/System/Resources')foriprojectinggetWorkspace().getProjects():ifnotiproject.isOpen():continueifile=iproject.getFile("README.md")ifnotifile.exists():contents="#"+iproject.getName()+"\n\n"ifiproject.hasNature("org.eclipse.jdt.core.javanature"):contents+="AJavaProject\n"elifiproject.hasNature("org.python.pydev.pythonNature"):内容+="APythonProject\n"writeFile(ifile,contents)这样一来,每个打开的项目都会有一个README.md文件,Java和Python项目会有额外的描述行。新功能原型制作您还可以使用Python脚本快速修复大部分需要的功能,或将其用作原型来帮助团队成员或用户了解如何使用此新功能。例如,EclipseIDE目前不支持自动保存正在处理的文件。虽然此功能肯定会在未来的版本中出现,但您仍然可以自己做,让当前文件每30秒或编辑器关闭时自动保存一次。下面是main方法中的代码片段。点击以下链接查看完整源码:autosave.pydefsave_dirty_editors():workbench=getService(org.eclipse.ui.IWorkbench)forwindowinworkbench.getWorkbenchWindows():forpageinwindow.getPages():foreditor_refinpage.getEditorReferences():part=editor_ref.getPart(False)ifpartandpart.isDirty():print"Auto-Saving",part.getTitle()part.doSave(None)在运行这个脚本之前,还需要勾选“允许脚本在UI线程中运行代码”(允许脚本在UI线程中运行代码)选项。这样,您可以将文件添加到您的工作中,右键单击它并选择“运行方式->EASE脚本”。每当编辑器保存时,都会在控制台视图中输出一条保存消息。要关闭自动保存,您需要做的就是通过单击控制台视图中的红色“终止”按钮来停止脚本。使用按钮、菜单和其他项快速扩展用户界面EASE的最佳功能之一是它允许您使用自己的脚本,同时将它们快速挂接到IDE中的UI元素中——作为新按钮或新菜单项。无需编写Java代码或使用新插件,只需在脚本头中添加几行-就这么简单。下面的例子是一个简单的脚本,为我们创建了三个新项目:createProject(name)指向EASE的注释行负责向项目管理器工具栏添加一个新按钮。下面显示的是另一组脚本,将另一个按钮添加到完全删除三个项目的同一工具栏。单击以下链接查看其源代码:createProjects.py和deleteProjects.py。#name:Deletefruitprojects#toolbar:ProjectExplorer#description:GetridofthefruitprojectsloadModule("/System/Resources")fornamein["banana","pineapple","mango"]:project=getProject(name)project.delete(0,None)for为了使按钮正确显示,我们还需要向新项目添加两个脚本文件——我们将在此处将新项目称为“ScriptsProject”。接下来,逐步打开Windows>Preference>Scripting>ScriptLocations。单击“添加工作区”按钮并选择ScriptsProject。该项目现在是脚本文件的默认位置。此时,您应该可以直接在项目管理器中查看这些按钮,而无需重新启动IDE。使用这些新按钮,我们可以快速创建和删除对应的三个项目。与第三方工具集成您可能随时需要使用Eclipse生态系统之外的工具选项(并且必须承认,虽然Eclipse本身非常强大,但仍有它无法做到的地方)。对于这样的场景,你可以很方便的在脚本中添加报文请求和工具调用。以下示例允许您集成explorer.exe,同时将其添加到上下文菜单,以便我们可以随时使用现有选择打开文件浏览器。点击以下链接查看其源码:explorer.py#name:Explorefromhere#popup:enableFor(org.eclipse.core.resources.IResource)#description:StartafilebrowserusingcurrentselectionloadModule("/System/Platform")loadModule('/System/用户界面')selection=getSelection()ifisinstance(selection,org.eclipse.jface.viewers.IStructuredSelection):selection=selection.getFirstElement()ifnotisinstance(selection,org.eclipse.core.resources.IResource):selection=adapt(selection,组织.eclipse.core.resources.IResource)ifisinstance(选择,org.eclipse.core.resources.IFile):选择=选择.getParent()ifisinstance(选择,org.eclipse.core.resources.IContainer):runProcess("explorer.exe",[selection.getLocation().toFile().toString()])为了让这个菜单正确显示,我们需要把这个脚本添加到一个新的项目中——我们仍然称它为“ScriptsProject”.接下来转到Windows>首选项>脚本>脚本位置。单击“添加工作区”按钮并选择ScriptsProject。您现在应该能够右键单击一个文件并看到这个新菜单项出现在弹出菜单中。单击以打开文件浏览器。(需要注意的是Eclipse中已经存在该特性,这里我们只是以它为例来说明其他第三方工具的集成。)这种Eclipse高级脚本环境可以充分发挥Python的强大潜能,从而帮助我们灵活的使用EclipseIDE。该项目目前处于起步阶段,因此期待未来有更多令人兴奋的功能和特性。感兴趣的朋友可以点此查看项目说明或点此参与其相关论坛(英文原版)。我们将在2016年的EclipseconNorthAmerica上对EASE进行更详细的介绍。在我的主题演讲《利用Python实现Eclipse脚本化》中,除了现有的Jython之外,我将讨论C-Python以及如何将其功能扩展到科学用例。敬请关注!原标题:如何使用Python破解你的EclipseIDE
