发布时间:2018年04月10日 20:37:14分享人:酷到爆炸来源:互联网6
精通 Intellij Idea 之热部署 部署在项目开发过程中是常有的事, 特别是 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 的修改,不支持对类和方法 签名的修改(比如修改类名,方法名,方法参数等) 。考虑这些限制,也是有理由的,替 换类定义,就需要新类和旧类之间有一个关联,这里关联就是类的全名(或许还有其他 信息) ,类名都改了,就不知道替换哪个类了。至于方法签名的修改,应该是考虑到运行 时方法的调用,通过方法签名替换已有的方法调用。 ? 三种目录 三种目录:项目的源程序目录,构建输出目录,部署目录(这是我按照我个人理解划 分的) 。热部署的设置与这些目录有着密切关系。源程序目录包括 java 文件,资源文件, web 资源文件等项目文件的目录;构建输出目录是指通过编译 java 源文件,copy 资源文 件构建一个应用程序部署之后应该具有的目录结构;部署目录很好理解,就是应用程序 在服务器中可以存在的位置。 通常我们部署一个应用是将该应用打包成 war 或者 ear, 而通常开发阶段是构建成 Server 指定 的目录结构来部署到 Server 上,如果每次要 copy 来 copy 去,那麻烦死了。所以我们要想办 法减少不必要的 copy。 ? 第一种方法 第一种方法:在 Server 部署目录下设置构建输出目录,以 tomcat 为例,就是 在%tomcat_home%webapps 目录下建立一个新的目录,目录名就是你的应用 context,具 体就是打开项目设置界面(ctrl+alt+shift+S,v8.0) ,选择 Modules,将你的应用 Exploded Directory 设置为%tomcat_home%webappsyourContext。 同时, 将你各个 Module 的编译输 出路径设置为%tomcat_home%webappsyourContextWEB-INFclasses (可能需要你预先手 动建立) ,这样 class 文件就自动生成到该目录下。 ? 第 二 种 方 法 : 现 在 一 些 Server 都 支 持 重 定 向 , 以 tomcat 为 例 , 可 以 在%tomcat_home%confCatalinalocalhost 下创建一个 xml 配置文件将部署目录指定为你 的 构 建 输 出 目 录 。 代 码 片 段 如 : <Context path=”/myApp” docBase=”D:workspacemyProjectoutexplodedmyApp” />。 这样每次修改了 java 文件之后 comile 一下修改的文件, 对于 jsp 需要 make 一下, 就能达到热部署的目的。 其实现在 Intellj Idea 默认设置使用的就是这种方法,只不过这个重定向的配置文件在你的 Documents and Settings 里面,所以你如果你使用这样方法,不必自己设置。 其实,这两种方法是异曲同工。 进一步设置:将你的构建输出目录直接设置在源程序目录中,然后重定向的 docBase 直接指 进一步设置 向你的 web 根目录(就是 WEB-INF 的父目录) 。这样,你只要将编译输出目录设置为 WEB-INFclasses 就行了,而且,修改 JSP 文件都不要重新构建,唯一要做的就是修改了 java 文件之后 compile 一下。 再进一步设置:打开 Setting 界面(ctrl+alt+S) ,然后 再进一步设置 ? 其一:选择 Compiler 选项,在 Deploy web application to servers after compilatoin 下勾
选 Never,为什么选 Never?因为根据我们上面的设置,对于 java 文件的修改,编译 (compile,ctrl+shift+f9)之后已经更新到了部署目录,而对于其他文件(例如 jsp) ,构 建(make,ctrl+f9)之后也都更新到了部署目录,当然如果你的部署目录就设置在源程序 目录中,那 jsp 都不要在 make 了。 ? 其二: 选择 Debugger-HotSwap 选项, 确保勾选了 Make project before reloading classes, 同时选择 Reload classes after compilation 为 Always。这样我们在编译某个修改了的 java 文件之后,就会利用 HotSwap 机制 reload class,而 Make project before reloading classes 就确保了其他修改过的文件一起同步到部署目录。 这样,经过上面这些设置,在 debug 时最大程度上减少了 Re-deploy 和重启服务器的次数。对 于内存不足的电脑来说,re-deploy 次数多了,就会 outOfMemory,然后不得不重启服务器。
爱华网本文地址 » http://www.aihuau.com/a/25101012/106297.html
更多阅读
快速部署企业私有云存储的方法——简介笔者刚刚拿到VEsystem 推出的VECloud 2.0最新版,目前正在测试中;在此谨以VECloud 2.0(和信云存储)为例,向大家讲解企业私有云存储的快捷部署方法,供企业信息管理人员在方案选择
怎么部署缓存服务器——简介随着互联网的不断发展,高清视频、图片、下载、音乐、网页内容越来越丰富,特别WEB视频和P2P的应用导致网络流量几何级的增长,对出口形成很大压力。面对这种情况,传统的做法一是增加宽带,二是通过路由限速。但这
【黄桥战役】1940年10月,新四军在陈毅运作和粟裕具体部署下,埋伏于黄桥,伏击了在日伪敌后坚持游击战的韩德勤部,全歼国民革命军八十九军,军长李守维阵亡——替日军解决了心腹大患。几天后在新四军主动撤出,日军不费一枪一弹,接防黄桥,把老蒋
编写一个像HelloWorld这样的简单程序, 用记事本基本就可以完成了, 但如果是开发一个工程项目, 就需要一个强大的集成开发环境 (IDE). 当然开发 Java 项目的 IDE 有很多, 比较有名的当数 Eclipse, 以及它的一个重要扩展 MyEclipse,
图解VS2008项目的安装与部署图解-WinFrom程序打包(Vs2008 打包,VS2010 打包)2010-09-23 14:34一、打开一个已经存在的项目,即你需要进行安装和部署的项目(不做这一步的话在安装和部署中就不能选择项目)二、选文件——添加新项目1、新