Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当文件在外部更改时,IntelliJ能否更新Tomcat上的资源?_Tomcat_Vim_Intellij Idea_Editor_Auto Update - Fatal编程技术网

当文件在外部更改时,IntelliJ能否更新Tomcat上的资源?

当文件在外部更改时,IntelliJ能否更新Tomcat上的资源?,tomcat,vim,intellij-idea,editor,auto-update,Tomcat,Vim,Intellij Idea,Editor,Auto Update,我的公司选择使用IntelliJ进行开发并部署到本地Tomcat服务器。我一直在做gVim的开发,不想改变 当我们使用eclipse时,我能够在外部更改文件时让eclipse重新发布资源。(我相信设置是使用本机钩子或轮询刷新)这很好,因为我更喜欢使用命令行工具而不是集成工具 我们正在使用IntelliJ来管理服务器,对此我没有意见,但是我不想破坏我当前的工作流程 我知道IntelliJ可以很好地保持同步,当我关注它时会更新文件,当我离开帧时会刷新它们 有没有一种方法可以让intelliJ更新已在

我的公司选择使用IntelliJ进行开发并部署到本地Tomcat服务器。我一直在做gVim的开发,不想改变

当我们使用eclipse时,我能够在外部更改文件时让eclipse重新发布资源。(我相信设置是使用本机钩子或轮询刷新)这很好,因为我更喜欢使用命令行工具而不是集成工具

我们正在使用IntelliJ来管理服务器,对此我没有意见,但是我不想破坏我当前的工作流程

我知道IntelliJ可以很好地保持同步,当我关注它时会更新文件,当我离开帧时会刷新它们


有没有一种方法可以让intelliJ更新已在外部更改的资源(Gvim、cli git…ext),而不移动到它?

WebStorm—intelliJ的另一个IDE—具有与您描述的非常相似的功能

也许你的智能IDE也有


遗憾的是,我一直无法找到一种方法来监视外部更改和更新IntelliJ内部的Tomcat服务器

我已经使用grunt实现了一个变通方法。(node.js任务运行程序)

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

  • Tomcat服务于一场爆发的战争
  • grunt看着我的前端文件
  • 当文件发生更改时,grunt会将我的前端文件移动到爆炸战争中
这样做的一些好处是:

  • 适用于任何外部编辑器/工具/ect(vim、sublime text、nano、cli git和任何其他您可以想到的工具)
  • 您不需要进入intelliJ来更新您的资源
  • 设置此解决方案不需要java
下面是

  • 您有一个额外的进程正在运行
  • 你还有另一个工具要处理
  • 你需要在爆炸战争中部署前端(在我看来没那么糟糕)
要了解有关grunt的更多信息并进行设置,您可以访问

此解决方案使用两个插件

  • 咕噜声复制件
  • 呼噜手表
首先,您设置了一个任务,将您的文件复制到爆炸战争中。这将使用grunt contrib复制插件,可能需要一些欺骗,但这并不太糟糕。我的看起来像这样:

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
    }
}
我希望这有帮助。我已经使用这个解决方案有一段时间了,它已经很好地完成了它的工作。祝你好运,温柔的男人。

注意:解决方案为Ubuntu(14.04)+升华文本2/3提供了作品

我最后玩了一个非常狡猾的把戏,但我很高兴。IntelliJ Idea在两种情况下更新资源(如果在设置中启用):

  • 当IDE窗口失去焦点时
  • 按“运行”区域中的按钮或使用快捷方式时,Ctrl+F10
  • 所以我从第一个案例开始,为我的操作系统(Ubuntu14.04)寻找一个实用程序,它可以聚焦IntelliJ Idea窗口,而不聚焦它,让它更新资源。我偶然发现,它允许通过标题获取窗口id,并通过id聚焦窗口。我创建了一个简单的.sh脚本:

    windowfocus
    只聚焦窗口,这意味着如果窗口位于背景或另一个工作区上,您将不会切换到它,您将停留在原来的位置,但窗口将只获得焦点。但IntelliJ Idea不起作用,资源没有更新,似乎需要充分关注

    因此,我尝试将
    windowfocus
    替换为
    windowactivate
    ——它在任何时候都会切换到窗口(即使它位于另一个工作区),因此它会变得聚焦、活动且可见。但结合切换回原始流程,它会在两个窗口之间产生一个可见的切换(如在窗口之间使用Alt+Tab),这非常明显,但实际上它确实做到了,因为它的作业资源会得到更新

    还有第二个选择——使用快捷方式。xdotool还有一个选项,可以通过其id向窗口发送击键:

    xdotool key --window "{$idea_id}" --clearmodifiers CTRL+F10
    
    但它不起作用,即使与对焦窗口相结合,也会留下按下Ctrl键后的效果。xdotool文档中有一节告诉我们,xdotool生成的关键事件设置了一个特殊的标志,因此,接收该事件的应用程序可能会分析它是否存在标志并忽略该事件,IntelliJ Idea可能就是这种情况

    经过一些研究,我发现了另一种发送关键事件的工具——它工作起来很有魅力,因为我想它使用了另一种发送/生成关键事件的方式:

    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}"
    
    为了将它与我用作代码编辑器的Sublime Text 3集成,我安装了一个插件,当用Sublime Text保存文件时,它可以运行自定义构建(终端命令或脚本)。以下是一个简单的构建设置:

    {
        "shell_cmd": "/path/to/script/idea_update_resources.sh"
    }
    
    所以现在我在另一个工作区打开了一个Intellij Idea,当我以Sublime文本保存一个文件时,通过向Intellij Idea窗口发送快捷方式来更新资源。我可以说,使用此实现聚焦窗口的时间并不明显。因此,它比咕噜或咕噜任务快得多,我会说是即时的,因为IntelliJ Idea自己进行更新,而且如果IntelliJ Idea在更新资源时执行一些额外的操作,那么使用它也是安全的。 谢谢@BenJamin的提问,希望能帮助到别人

    更新:

    使用此设置一段时间后
    {
        "shell_cmd": "/path/to/script/idea_update_resources.sh"
    }