2014-10-03 25 views
4

我的公司已选择使用IntelliJ进行开发和部署到本地Tomcat服务器。我一直在开发gVim,并且不想改变。当文件从外部改变时,IntelliJ能够更新Tomcat上的资源吗?

当我们使用eclipse时,我可以在外部更改文件时使用eclipse重新发布资源。 (我相信设置是刷新使用原生挂钩或轮询)这真是太棒了,因为我更喜欢使用命令行工具来集成它们。

我们正在使用IntelliJ来管理服务器,我很满意,但是我不希望破坏当前的工作流程。

我知道IntelliJ保持非常好的同步状态,并且在我关注它时更新文件,并在离开框架时刷新它们。

有没有办法让智能更新资源在外部更改(Gvim,cli git ... ext)而不移动到它?

+0

独立运行服务器。 – Stefan 2014-10-04 18:21:56

+0

这将如何帮助? – BenJamin 2014-11-03 20:06:00

+0

@BenJamin,你有没有找到它的解决方案? – 2015-09-17 11:36:07

回答

1

可悲的是,我一直无法找到一个方法来监控外部的变化和更新的IntelliJ内Tomcat服务器。

我已经实施了一个使用grunt的解决方法。 (一Node.js的任务运行)

这种解决方法背后的理论很简单:

  • 的Tomcat提供的分解战争
  • 咕噜手表我的前端文件
  • 当一个文件更改咕噜动我的前端文件到爆炸战争

做这种方式的一些好处是:

  • 适用于任何外部编辑器/工具/ ect(vim,sublime text,nano,cli git和任何其他您可以想到的)
  • 您不需要迁移到intelliJ以获取资源更新。
  • 无需java即可建立此解决方案。

一面是

  • 你有一个额外的进程在运行。
  • 你有另一个工具来处理。
  • 需要部署在爆炸战争前端的东西(不是真的,在我看来坏)

要了解更多关于呻吟,把它设置,您可以访问gruntjs.com

此解决方法使用两个插件

  • 咕噜-contrib请复制
  • 咕噜-的contrib-看

首先你建立一个任务是复制文件到您的爆炸战争。这将使用grunt-contrib-copy插件,并可能需要一些折扣,但它并不是太糟糕。我看起来是这样的:

copy:{ 
    webfilesToOutdir:{ 
     files: [ 
      {expand: true, src: ['WebContent/**'], 
      dest: '../out/artifacts/attensity-q/exploded/attensity-q.war', 
      rename: function(dest, src){ 
        var ret = dest+"/"+ src.replace('WebContent/', ''); 
        return ret; 
       } 
      } 
     ] 
    } 
} 

接下来,您将需要一个任务来观察您的文件并在出现更改时运行副本。这将使用grunt-contrib-watch并且再次没有什么坏的,你只需要调整路径。这是我的:

watch: { 
    web: { 
     files: ['WebContent/**', '!WebContent/less/**'], 
     tasks: 'copy:webfilesToOutdir', 
     interrupt: true 
    } 
} 

我希望这有助于。我一直在使用这个解决方案已经有一段时间了,它的工作很好。祝你好运,温柔的男人。

+0

谢谢!我已经尝试过这个解决方案,但是使用grunt-sync插件,它只复制修改过的文件。它的运行速度相当缓慢,一次运行可能需要大约10秒。我会尝试用简单的副本来测试它,但是我们有很多文件需要更新。我认为减少要观看的文件数量也是值得的,但我一定会再试一次。解决方案实际上非常简单,但我担心Idea在更新资源时会做一些额外的事情,而不仅仅是从一个文件夹复制到另一个文件夹。 – 2015-09-18 20:30:49

+0

我想这可能取决于你的设置,但至少对我们而言,我认为当它更新资源时,想法不会有什么奇怪之处。一次运行需要10秒钟的时间,如果在我花费时间从vim转换到chrome并刷新时没有更新,我将无法容忍这种情况。我还没有尝试过使用grunt-sync,也许是复制,尽管移动了更多,速度更快,或者您的文件比我们多。 (这会让我感到惊讶,我们也是一个相当大的项目)。无论哪种方式..祝你好运。我希望这有助于某种方式。 – BenJamin 2015-09-18 22:52:13

+0

经过几次测试,我可以使用[gulp](https://github.com/gulpjs/gulp)('gulp.src' +'gulp.dest' vs'grunt-copy')获得更好的结果。对于约4k档案(〜40mb),Grunt在约12秒内完成他的工作,而对于Gulp则需要约4秒。我仍在试验,但这已经是一个巨大的提升。 – 2015-09-21 15:17:04

0

WebStorm - IntelliJ的另一个IDE - 看起来很像你所描述的东西。

也许你的IntelliJ IDE也有它。

enter image description here

+0

我已经阅读了一下它,它似乎与我们正在寻找的内容相反 - 它允许从IntelliJ Idea中运行外部工具。我们需要的是从外部工具/编辑器运行Idea的内置工具。 – 2015-09-18 14:57:48

+0

是的,不完全。我确实把vim变成了智能来看看它的感受。事实证明,这对我来说至少并不理想。 谢谢你的建议。 – BenJamin 2015-09-18 19:52:18

1

注:解决方案为Ubuntu(14.04)所提供的作品+崇高文字2/3

我已经结束了一个非常棘手的伎俩,但我对此非常高兴。在两种情况下(如果设置中启用)IntelliJ IDEA的更新资源:

  1. 当IDE窗口失去焦点
  2. 运行部分按下按钮或使用快捷键为它按Ctrl + F10

所以我已经开始与第一种情况下寻找适合我的操作系统(Ubuntu的14.04)的工具,它可以集中的IntelliJ IDEA窗口不重点,使其更新资源。我偶然发现了xdotool,它允许通过它的标题获得窗口的ID,并通过它的ID来关注窗口。我创建了一个简单的.SH脚本:

current_id="$(xdotool getactivewindow)" # get id of current window 
idea_id="$(xdotool search --name 'IntelliJ IDEA')" 
xdotool windowfocus "${idea_id}" # switch to idea 
xdotool windowfocus "${current_id}" # switch to current window 

windowfocus只是聚焦窗口,这意味着如果窗口的背景或另一个工作区,你不会切换到它,你”我会留在你身边,但窗口只是获得焦点。但它没有与IntelliJ Idea,资源没有更新,似乎它要全力关注。

所以我试图用windowactivate代替windowfocus--它在切换到窗口时(即使它在另一个工作区),因此它变得聚焦,活动和可见。但与切换回原始过程相结合,它产生了像两个窗口之间的可见切换(例如,当您在窗口之间使用Alt + Tab时),这非常明显,但它确实是它的工作 - 资源得到更新。

还有第二个选项 - 使用快捷方式。xdotool有一个选项可以发送击键到窗口通过它的id以及:

xdotool key --window "{$idea_id}" --clearmodifiers CTRL+F10 

,但它没有工作,即使在结合聚焦窗口,也留下了压的后效应Ctrl键。在xdotool文档中有一段Sendevent Notes文档,告诉xdotool生成的按键事件会设置一个特殊标志,因此接收该事件的应用程序可能会分析它是否存在标志并忽略该事件,可能是IntelliJ Idea的情况。

经过一番研究,我发现另一个关键发送工具 - xvkdb - 和它的工作就像一个魅力,因为我猜它采用发送/生成的关键事件的另一种方式:

xvkbd -window "*IntelliJ IDEA*" -text "\C\[F10]" 

运行时单独这个命令将焦点集中在一个Intellij Idea窗口中,我用xdotool将焦点带回当前进程。下面是该脚本的最终版本:

current_id="$(xdotool getactivewindow)" 
xvkbd -window "*IntelliJ IDEA*" -text "\C\[F10]" 
xdotool windowfocus "${current_id}" 

将其与崇高的文本3,这是我作为代码编辑器中使用整合,我已经安装了一个插件Sublime​On​Save​Build,它可以运行一个自定义生成(终端命令或当一个人将文件保存在崇高文本中时。下面是一个简单的构建设置:

{ 
    "shell_cmd": "/path/to/script/idea_update_resources.sh" 
} 

所以现在我有一个IntelliJ IDEA的另一个工作区中打开,当我保存在崇高的文本文件,资源得到通过发送快捷方式的IntelliJ IDEA更新窗口。我可以说,使用这种实现来聚焦窗口的时间并不明显。因此,它是远远来得更快,然后咕噜咕嘟咕嘟任务,我要说的瞬间,因为IntelliJ IDEA的确实本身的更新,而且它是安全的,如果的IntelliJ IDEA做一些,以防使用更新资源时的额外操作。 感谢@BenJamin的问题,希望它能帮助别人。

更新:

使用此设置了一段时间就无法按预期工作后:如果IntelliJ IDEA的是另一个工作区,或者它的界面完全覆盖另一个窗口,与xvkdb解决方案将不幸失败,不会执行资源更新。我转回到使用windowactivate

+0

不错的解决方案!我也尝试了一个自动化的寡妇激活,发现它太侵入。听起来就像你用xvkdb获得了胜利者。我甚至可能会玩一下。无论哪种方式,感谢您花时间发布您的解决方案! – BenJamin 2015-09-24 15:53:18

相关问题