IntelliJ Idea熱加載 自動更新
IntelliJ IDEA熱加載自動更新(Update classes and resources )
IntelliJ IDEA默認文件是自動保存的,但是手頭有個項目jsp文件改動后,在tomcat中不能立即響應變化。想要jsp文件改動后立刻看到變化,可以通過修改配置來實現。
在IDEA tomcat 中server的配置里,有個On frame deactivation,選擇Update classes and resources。另外有個配置on update action,就是手動操作的時候采取什么動作,可以重啟服務器,也可以像上面一樣更新類和資源文件,我選的是Update classes and resources,也可以選擇Redeploy。
On update action:當發現更新時的操作 選擇Update classes and resources
On frame deactivation:當IDEA 切換時的操作 (比如縮下去、打開網頁等) 選擇Update classes and resources
可是當前項目沒有Update classes and resources這個選項,有個Hot Swap classes。這是由於服務器添加的Artifact類型問題,
一般一個module對應兩種類型的Artifact,一種是war,一種是war explored。war就是已war包形式發布,當前項目是這種形式,在這種形式下On frame deactivation配置沒有Update classes and resources選項。war explored是發布文件目錄,選擇這種形式,On frame deactivation中就出現Update classes and resources選項了。
在debug模式下,修改某個方法名會自動class reload
intellij idea在debug模式下,會自動 檢測class的修改
,等會兒會自動class reload.注意,不是debug是不會的。不設置update classes and resouces, class修改后是不會自動class reload的。所以之前設置update classes and resources是有必要的.
JVM之-----熱部署hotswap
熱部署是在不重啟 Java 虛擬機的前提下,能自動偵測到 class 文件的變化,更新運行時 class 的行為。
目前的 Java 虛擬機只能實現方法體的修改熱部署,對於整個類的結構修改,仍然需要重啟虛擬機,對類重新加載才能完成更新操作。對於某些大型的應用來說,每次的重啟都需 要花費大量的時間成本。雖然 osgi 架構的出現,讓模塊重啟成為可能,但是如果模塊之間有調用關系的話,這樣的操作依然會讓應用出現短暫的功能性休克。本文將探索如何在不破壞 Java 虛擬機現有行為的前提下,實現某個單一類的熱部署,讓系統無需重啟就完成某個類的更新。
默認的虛擬機行為只會在啟動時加載類,如果后期有一個類需要更新的話,單純替換編譯的 class 文件,Java 虛擬機是不會更新正在運行的 class。如果要實現熱部署,最根本的方式是修改虛擬機的源代碼,改變 classloader 的加載行為,使虛擬機能監聽 class 文件的更新,重新加載 class 文件,這樣的行為破壞性很大,為后續的 JVM 升級埋下了一個大坑。
另 一種友好的方法是創建自己的 classloader 來加載需要監聽的 class(終極方案),這樣就能控制類加載的時機,從而實現熱部署。
難點:
這種自上而下(父類優先加載)的加載方式的好處是,讓每個 classloader 執行自己的加載任務,不會重復加載類。但是這種方式卻使加載順序非常難改變,讓自定義 classloader 搶先加載需要監聽改變的類成為了一個難題。
不過我們可以換一個思路,雖然無法搶先加載該類,但是仍然可以用自定義 classloader 創建一個功能相同的類,讓每次實例化的對象都指向這個新的類。當這個類的 class 文件發生改變的時候,再次創建一個更新的類,之后如果系統再次發出實例化請求,創建的對象講指向這個全新的類。
實現:
下面來簡單列舉一下需要做的工作。
- 創建自定義的 classloader,加載需要監聽改變的類,在 class 文件發生改變的時候,重新加載該類。
- 改變創建對象的行為,使他們在創建時使用自定義 classloader 加載的 class。
This new feature encapsulates the ability to substitute modified code in a running application through the debugger APIs.
——'HotSwapping' using JVM:http://www.jug.mk/blogs/ipenov/entry/hotswapping_using_jvm
網上很多人誤解熱部署和熱加載的概念,所以造成亂配置的行為,這里提示一下.
熱部署:就是容器狀態在運行的情況下部署或者重新部署整個項目.在這種情況下一般整個內存會清空,重新加載.簡單來說就是Tomcat或者其他的web服務器會幫我們重新加載項目.這種方式可能會造成sessin丟失等情況.
熱加載:就是容器狀態在運行的情況下重新加載改變編譯后的類.在這種情況下內存不會清空,sessin不會丟失,但容易造成內存溢出,或者找不到方法。因為內存無法轉變成對像. 一般改變類的結構和模型就會有異常,在已經有的變量和方法中改變是不會出問題的。在中模式最好是在調試過程中使用,免得整個項目加載.
debug模式都支持熱加載.很方便使用.
——IDEA TOMCAT WEB開發 SSH開發 修改類不重啟 熱部署 熱加載 IDEA8:http://3000pzj.javaeye.com/blog/503222
部署在項目開發過程中是常有的事,特別是debug的時候。但是如果每次fix一個bug都要把整個項目重新部署一遍以便測試fix的效果或者繼續debug其他bug,那對開發人員來說無疑是一大噩夢。不過誰都不想噩夢連連,有了JVM的hotSwap以及Intellij Idea對debug,hotSwap的支持,從此美夢相伴(誇張了點:))。今天通過這篇文章介紹一下通過對Intellij Idea熱部署的設置達到最方便的最高效的debug效果。
我想在介紹具體設置之前,不妨了解一些背景知識和概念。
HotSwap:“HotSwap”是JPDA(Java Platform Debugger Architecture)中的一個特性,JPDA增強是自Java 2 SDK1.4新增的功能。HotSwap允許將JVM中的類定義替換為新的類定義,這就允許開發人員在debug時,將修改過的class替換JVM中舊有的class,無需重新啟動服務器。不過,目前HotSwap只支持對方法body的修改,不支持對類和方法簽名的修改(比如修改類名,方法名,方法參數等)。考慮這些限制,也是有理由的,替換類定義,就需要新類和舊類之間有一個關聯,這里關聯就是類的全名(或許還有其他信息),類名都改了,就不知道替換哪個類了。至於方法簽名的修改,應該是考慮到運行時方法的調用,通過方法簽名替換已有的方法調用。
——精通Intellij Idea之熱部署:http://blog.buyihanshe.com/20090606/mastering-intellij-idea-hot-deploy.htm
dea可以自動優化導入包,但是有多個同名的類調用不同的包,必須自己手動Alt+Enter設置
設置idea導入包

勾選標注 1 選項,IntelliJ IDEA 將在我們書寫代碼的時候自動幫我們優化導入的包,比如自動去掉一些沒有用到的包。
勾選標注 2 選項,IntelliJ IDEA 將在我們書寫代碼的時候自動幫我們導入需要用到的包。但是對於那些同名的包,還是需要手動 Alt + Enter 進行導入的
========================================================================================
idea有很多快捷方式(Alt+Insert),比如get,set,構造函數,hashcode,equlas....

https://www.zhihu.com/question/23648034
http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/introduce.html
http://www.ituring.com.cn/article/37792
http://blog.csdn.net/chenshun123/article/details/51285890

快捷鍵
查找相關
- 雙擊Shift 查找項目中所有目錄中的文件
- Ctr+F 在當前文件中查找指定內容
- Ctrl+Shift+F 在當前項目查找包含查找內容的文件
- Ctrl+N 查找類 (n:navigate)
- Ctrl+Shift+N 查找類和文件
- Ctrl + E 顯示最近使用過的文件
- Alt + F7 查找函數或者變量或者類的所有引用到的地方
- Ctrl+Shift+Alt+N 查找類中的方法或變量
https://www.zhihu.com/question/20783392
intellij idea maven projects工具條消失問題的解決
點擊idea左下腳的如下按鈕,maven projects工具條會馬上出來:

按鈕之后的效果圖如下:

修改IntelliJ IDEA中tomcat的輸出路徑 (另外修改發布路徑)


(下圖有個Application Context 就是發布路徑:)


svn顯示差異:
INtelliJ Ideal是有這個功能的,包括修改代碼后的顏色變化。藍色(修改),綠色(新增),灰色(刪除).
修改顏色:
setting->file status:

但是發現改了這里后是version control那里的local change顏色變了,左側欄沒有變動
intellij idea svn 修改文件后,父文件夾也標注修改
svn文件修改后,默認只有當前文件更改而父文件沒有標注,很不直觀;查了一頓后,發現,可以設置;
File—->settings—->version control—–>勾選show directories with changed descendants

下面就是比較這個編輯器比eclipse的版本管理好的地方啦。
也就是這個本地代碼在修改之后,他可以按你的想法分文件夾存放。
以方便把任務一個個的分開,做完一個提交一個。而不是在你提交的時候,你得自己仔細仔細的查找哪個和哪個是一個任務的,然后再提交,下面看圖示范。

圖上,忘記打箭頭啦(那個綠色的加號可以添加類別,紅色減號,刪除類別。就不示范了)。
可以看到我又添加了2個列表,一個是“線程測試”,一個是“system測試”。
這相當於是2個任務,他們又互不相干。你干完一個,你就可以選中一個列表,然后提交。
而不是下面這種。三個修改的文件放在一起,提交的時候,得自己找你完成了哪個任務,提交哪個文件。
intellij在切換代碼選項卡的時候左側的代碼目錄樹窗口跟着聯動:

IntelliJ IDEA 設置選中標識符高亮
設置為黃色顯眼一點。
IntelliJ idea快捷鍵:
alt+enter,選中一個類的時候可以自動導入包
IntelliJ IDEA的全局搜索快捷鍵:ctrl+shift+F
Intellij idea中優化包導入用的快捷鍵是 ctrl + alt + o, (optimize import)
alter+En ter: Alt + Enter Show intention actions and quick-fixes
Double Shift :Search everywhere
Ctrl + N :Go to class
Ctrl + Shift + N: Go to file
Ctrl + B or Ctrl + Click :Go to declaration
Ctrl + Alt + B :Go to implementation(s) 或者鼠標點擊,跳轉到實現類,這個非常實用。
IntelliJ IDEA的函數鏈接:按住ctrl,再鼠標點擊選中的函數,就可以查看函數的源碼
IntelliJ IDEA里java工程的java原文件及實現文件:進入源文件后,再按ctrl+H就可在右側直接顯示出實現它的文件,后綴是impl 。
顯示打開的文件:
Ctrl + E :Recent files popup
ctrl+tab:顯示switcher
十大Intellij IDEA快捷鍵
1 智能提示
Intellij首當其沖的當然就是Intelligence智能!基本的代碼提示用Ctrl+Space,還有更智能地按類型信息提示Ctrl+Shift+Space,但因為Intellij總是隨着我們敲擊而自動提示,所以很多時候都不會手動敲這兩個快捷鍵(除非提示框消失了)。用F2/ Shift+F2移動到有錯誤的代碼,Alt+Enter快速修復(即Eclipse中的Quick Fix功能)。當智能提示為我們自動補全方法名時,我們通常要自己補上行尾的反括號和分號,當括號嵌套很多層時會很麻煩,這時我們只需敲Ctrl+Shift+Enter就能自動補全末尾的字符。而且不只是括號,例如敲完if/for時也可以自動補上{}花括號。
最后要說一點,Intellij能夠智能感知Spring、Hibernate等主流框架的配置文件和類,以靜制動,在看似“靜態”的外表下,智能地掃描理解你的項目是如何構造和配置的。
5 查找打開
類似Eclipse,Intellij的Ctrl+N/Ctrl+Shift+N可以打開類或資源,但Intellij更加智能一些,我們輸入的任何字符都將看作模糊匹配,省卻了Eclipse中還有輸入*的麻煩。最新版本的IDEA還加入了Search Everywhere功能,只需按Shift+Shift即可在一個彈出框中搜索任何東西,包括類、資源、配置項、方法等等。
類的繼承關系則可用Ctrl+H打開類層次窗口,在繼承層次上跳轉則用Ctrl+B/Ctrl+Alt+B分別對應父類或父方法定義和子類或子方法實現,查看當前類的所有方法用Ctrl+F12。
要找類或方法的使用也很簡單,Alt+F7。要查找文本的出現位置就用Ctrl+F/Ctrl+Shift+F在當前窗口或全工程中查找,再配合F3/Shift+F3前后移動到下一匹配處。
Intellij更加智能的又一佐證是在任意菜單或顯示窗口,都可以直接輸入你要找的單詞,Intellij就會自動為你過濾。