2014-10-03 55 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

相關問題