【问题标题】:Create Eclipse shortcut to run particular target of an build file创建 Eclipse 快捷方式以运行构建文件的特定目标
【发布时间】:2011-11-10 04:53:23
【问题描述】:

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

有没有办法为特定目标分配键盘快捷键,而不是每次都执行几个步骤,以便我可以轻松运行该目标。

【问题讨论】:

    标签: java eclipse keyboard-shortcuts


    【解决方案1】:

    可以在 Window > Preferences > General > Keys 下找到键的主要首选项页面(或更快:按 Ctrl+3,键入 Keys 并按 Enter)。请参阅How to manage keyboard shortcuts in Eclipse and why you should 文章以实现您想要的。

    【讨论】:

      【解决方案2】:

      好的,我尝试了“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())
      

      注意标题注释中“魔术关键字”的使用,它指定了脚本所需的快捷键。

      然后,您需要指定要加载脚本的位置,方法是:

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

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

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

      太棒了,它有效:)

      一个问题是我无法取消正在使用此方法进行的构建。我怀疑这是因为我在调用 .build() 时使用了 NullProgressMonitor 类。如果我知道一种在此处添加适当进度监视器的方法(可让您取消正在进行的构建),那么我将更新此答案...

      【讨论】:

        【解决方案3】:

        注意:这是我最初的“Practical Macro + Beanshell script”技术,我已经放弃了。我更喜欢第二个答案中提到的其他技术。

        我也一直在寻找一种方法来为特定的 make 目标执行此操作。唯一可用的内置快捷方式是“重建最后一个目标”,如果您经常在目标之间交换,这并不是很有帮助。

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

        我正在评估“Practical Macro”插件。它能够为宏分配快捷键。它还可以将宏定义为 beanshell 脚本。

        所以剩下的就是弄清楚什么样的 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,并通过“Practical Macro”插件将其添加为宏
        • 为其分配快捷键

        ...这是一个相当复杂的方法,所以如果有人有任何更简单的替代方案,我愿意听取他们的意见。

        更新

        FWIW,我设法以这种形式为“Practical Macro”创建了一个 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 会再次响应。

        所以它并不完美,但我想这是我所追求的方向的渐进式进步......至于在构建过程中导致冻结/失速的原因,我不能肯定地说,但我怀疑实际上宏插件会锁定 Eclipse,直到宏完成。

        下次:

        也许如果我有另一个时间窗口再次查看此问题,我会尝试查看是否可以通过键盘快捷键触发 EASE-javascript 脚本。这个页面似乎暗示这是可能的:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-08-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多