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就会自动为你过滤。