创建Eclipse快捷方式以运行构建文件的特定目标



我有不同的项目和几个构建文件,其中有不同的目标。
通常,如果我想运行一个目标,我使用导航到"Ant"视图,然后选择构建文件,然后选择要运行的目标。

比起每次执行几个步骤,有没有办法为特定的目标分配一个键盘快捷键,以便我可以轻松地运行该目标

键的主要首选项页面可以在Window> Preferences> General> keys (或更快:按Ctrl+3,键入keys并按Enter)下找到。请参阅如何在Eclipse中管理键盘快捷键,以及为什么您应该文章来实现您想要的。

好了,我已经尝试了"EASE-script +键盘快捷键"技术,效果要好得多:

我创建了一个"my_build_target.js" javascript文件在我的工作空间/项目的基础:

/**
 * keyboard: Alt+Shift+2
 */
targetmanager = org.eclipse.cdt.make.core.MakeCorePlugin.getDefault().getTargetManager()
projects = targetmanager.getTargetBuilderProjects()
folder = projects[0].getFolder("Test/Scenarios/Win32")
// targets = targetmanager.getTargets(folder)
target = targetmanager.findTarget(folder, "MyBuildTargetName")
target.build(new org.eclipse.core.runtime.NullProgressMonitor())

注意在标题注释中使用了"magic keyword",它指定了脚本所需的快捷键。

然后你需要指定你的脚本加载的位置:

  • "Windows>>首选项>>脚本>>脚本位置"

就我个人而言,我点击了"添加工作区"按钮,并指定了我的工作区/项目的基础(这是我放置脚本的地方)。

我重新启动Eclipse,然后使用我指定的"Alt+Shift+2"快捷键。

棒极了,它工作了:)

一个问题是,我不能取消使用此方法正在进行的构建。我怀疑这是由于我在调用.build()时使用了NullProgressMonitor类。如果我了解到在这里添加适当的进度监视器的方法(允许您取消正在进行的构建),那么我将更新此答案…

注意:这是我最初的" practicalmacro + Beanshell script"技术,我已经放弃了。我更喜欢第二个答案中提到的另一种方法。

我一直在寻找一种方法来实现特定的make目标。唯一可用的内置快捷方式是"重建最后一个目标",如果你经常在目标之间切换,这并不是那么有用。

虽然我还没有一个具体的解决方案,但我正在努力。

我正在评估"实际宏"插件。它能够为宏分配快捷键。它还可以将宏定义为bean脚本。

所以剩下的就是弄清楚什么样的beanshell脚本能够运行一个特定的make目标。

我尝试通过EASE脚本工具来探索Eclipse API。

我将分享我如何成功地以编程方式(通过他们的javascript接口)运行make-target的步骤/注意事项:

targetmanager = org.eclipse.cdt.make.core.MakeCorePlugin.getDefault().getTargetManager()
projects = targetmanager.getTargetBuilderProjects()
folder = projects[0].getFolder("Path/To/My/Build/Targets/")
// targets = targetmanager.getTargets(folder)
target = targetmanager.findTarget(folder, "MyBuildTargetName")
target.build(new org.eclipse.core.runtime.NullProgressMonitor())

所以我想剩下的就是让我(或其他感兴趣的人):

  • 将此脚本从javascript转换为beanshell,并通过"几乎宏"插件将其添加为宏
  • 指定快捷键

…这是一种相当复杂的方法,所以如果有人有更简单的选择,我很乐意听取。

:

FWIW,我设法创建了一个beanshell脚本"实际上宏"在这个形式:

//Scripts are beanshell format (see http://www.beanshell.org/)
//variable               type
//styledText             the org.eclipse.swt.custom.StyledText instance for the current editor
//console                write output to the macro console via console.write(String), .writeln(String), .write(Exception)
//findTarget             the instance of org.eclipse.jface.text.IFindReplaceTarget
import org.eclipse.swt.custom.StyledText;
import org.eclipse.jface.text.IFindReplaceTarget;
c = org.eclipse.core.runtime.Platform.getBundle("org.eclipse.cdt.make.core").loadClass("org.eclipse.cdt.make.core.MakeCorePlugin");
m = c.getMethod("getDefault", null);
dflt = m.invoke(null, null);
targetmanager = dflt.getTargetManager();
projects = targetmanager.getTargetBuilderProjects();
folder = projects[0].getFolder("Path/To/My/Build/Targets/");
target = targetmanager.findTarget(folder, "MyBuildTargetName");
target.build(new org.eclipse.core.runtime.NullProgressMonitor());

是的,它确实可以工作,但唯一的缺点是eclipse ide没有任何刷新就停止了。只有在构建完成之后,控制台窗格才会用最终的构建输出(一次点击)更新,Eclipse才会再次响应。

所以这不是完美的,但我想这是在我追求的方向上的渐进进步…至于在构建过程中导致这种冻结/停滞的原因,我不能肯定,但我怀疑是practical Macro插件锁定了Eclipse,直到宏完成。

下时间:

也许如果我有另一个窗口的时间再看看这个,我试着看看我是否可以触发一个简单的javascript脚本通过键盘快捷键。这一页似乎暗示这是可能的:

https://wiki.eclipse.org/EASE/Scripts

最新更新