当文件在外部更改时,IntelliJ能否更新Tomcat上的资源?
我的公司选择使用IntelliJ进行开发并部署到本地Tomcat服务器。我一直在做gVim的开发,不想改变 当我们使用eclipse时,我能够在外部更改文件时让eclipse重新发布资源。(我相信设置是使用本机钩子或轮询刷新)这很好,因为我更喜欢使用命令行工具而不是集成工具 我们正在使用IntelliJ来管理服务器,对此我没有意见,但是我不想破坏我当前的工作流程 我知道IntelliJ可以很好地保持同步,当我关注它时会更新文件,当我离开帧时会刷新它们当文件在外部更改时,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更新已在外部更改的资源(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
- 您有一个额外的进程正在运行
- 你还有另一个工具要处理
- 你需要在爆炸战争中部署前端(在我看来没那么糟糕)
- 咕噜声复制件
- 呼噜手表
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在两种情况下更新资源(如果在设置中启用):
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"
}