这几天在写Java Web页面,开发环境是eclipse+maven+jetty。开发java web最烦的就是改个文件需要重启web server,尽管现在的web server 支持了热部署,不过其实现相当于重启了web server,如果文件多些初始化复杂些,重启的时间也够受的。它不像web server那样需要重启服务,而是动态的加载修改的文件,所以反应速度上要好很多,它除了可以热加载class、jsp文件,也可以是spring、hibernate等配置文件。
1、Jrebel介绍:
我们通常做WEB开发的时候经常会修改java类,或者是工程配置文件,而每次修改后都需要将服务器重新启动,才能显示修改后的效果,而有些服务器 像 weblogic ,jboss 启动的时候非常慢,频繁的启动浪费了大量的时间,降低了开发效率。
Jrebel(JavaRebel) 可以帮助解决频繁的重新启动服务器的问题,从而为开发节约了大量的时间。
Jrebel是一个JVM插件(-javaagent),能够即时重载java claass更改,因此不需要重新部署一个应用或者重启容器,节约发者时间。它是一个Java EE和Java 独立应用的常用解决方案。
Jrebel可以和MyEclipse,tomcat等快速的组装在一起,用语动态部署java文件而不用重启服务器,从而可解决大量的开发时间,提高开发效率。
只要配置了Jrebel,它可以监控你的编译文件存放目录,例如:APP_INF/classes 或者 WEB-INF/classes 。
然后在客户端发送页面请求时,关联到该类时,它会自动比较当前JVM中装载的该类是否有修改,如果有则重新装载该类文件。
可以从jrebel得到JRebel,它不是个免费软件,但有30天的试用期,附件中会提供破解版供使用。
使用说明(仅针对目前我用的框架,其他环境可能略有微调):
1.修改项目的pom.xml文件,将已有的jetty plugin配置修改成: <!-- jetty -->
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>8.1.0.RC0</version>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<webAppConfig>
<contextPath>/${project.artifactId}</contextPath>
</webAppConfig>
</configuration>
</plugin>
2.在<build><plugins>中加入
<plugin>
<groupId>org.zeroturnaround</groupId>
<artifactId>javarebel-maven-plugin</artifactId>
<executions>
<execution>
<id>generate-rebel-xml</id>
<phase>process-resources</phase>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
3.然后运行mvn javarebel:generate。可以在target/classes路径中看到新生成的rebel.xml
示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com/alderaan/rebel-2_0.xsd">
<classpath>
<dir name="C:/hop/haierworkspace/avs/bvs/bvs-app/target/classes">
<include name="com/haier/avs/house/domain/AvsBaseAct.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfCompete.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfProductGroup.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfProductProgram.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfProject.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfProjectLog.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfProjectStatus.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsBzfUserRequire.hbm.xml"/>
<include name="com/haier/avs/house/domain/AvsMdRegionBranch.hbm.xml"/>
<include name="com/haier/avs/house/domain/House-dynamic.xml"/>
<include name="com/haier/avs/house/domain/UserRequire-dynamic.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzCronTrigger.hbm.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzFiredTrigger.hbm.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzJobDetail.hbm.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzSchedulerState.hbm.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzSimpleTrigger.hbm.xml"/>
<include name="com/haier/bvs/console/quartz/domain/QuartzTrigger.hbm.xml"/>
<include name="com/haier/bvs/util/domain/Common-dynamic.xml"/>
<include name="com/haier/bvs/util/domain/SysLog.hbm.xml"/>
<include name="com/haier/openplatform/showcase/basic/domain/Department.hbm.xml"/>
<include name="com/haier/openplatform/showcase/basic/webapp/action/CreateDepartmentAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/domain/Resource-dynamic.xml"/>
<include name="com/haier/openplatform/showcase/security/domain/Resource.hbm.xml"/>
<include name="com/haier/openplatform/showcase/security/domain/Role.hbm.xml"/>
<include name="com/haier/openplatform/showcase/security/domain/User.hbm.xml"/>
<include name="com/haier/openplatform/showcase/security/domain/UserDepartment-dynamic.xml"/>
<include name="com/haier/openplatform/showcase/security/service/impl/UserServiceImpl_en_US.properties"/>
<include name="com/haier/openplatform/showcase/security/service/impl/UserServiceImpl_zh_CN.properties"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/CreateResourceAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/CreateRoleAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/CreateUserAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/LoginAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/ResetPasswordAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/ResetPasswordAction_en_US.properties"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/ResetPasswordAction_zh_CN.properties"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/RetrievePasswordAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/RetrieveUpdatePasswordAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdatePasswordAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdatePasswordAction_en_US.properties"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdatePasswordAction_zh_CN.properties"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdateResourceAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdateRoleAction-validation.xml"/>
<include name="com/haier/openplatform/showcase/security/webapp/action/UpdateUserAction-validation.xml"/>
<include name="env.properties"/>
<include name="log4j.xml"/>
<include name="spring/avs/house/spring-house.xml"/>
<include name="spring/basic/spring-department.xml"/>
<include name="spring/cache/ehcache.xml"/>
<include name="spring/cache/spring-cache-security.xml"/>
<include name="spring/cache/spring-cache.xml"/>
<include name="spring/delete-spring-quartz.xml"/>
<include name="spring/logutil/spring-logutil.xml"/>
<include name="spring/quartz/delete-spring-quartz.xml"/>
<include name="spring/security/spring-resource.xml"/>
<include name="spring/security/spring-role.xml"/>
<include name="spring/security/spring-user.xml"/>
<include name="spring/security/spring-userDepartment.xml"/>
<include name="spring/spring-common.xml"/>
<include name="spring/spring-datasource.xml"/>
<include name="spring/spring-external.xml"/>
<include name="spring/spring-monitor.xml"/>
<include name="spring/spring-transaction.xml"/>
<include name="struts/avs/house/struts-house.xml"/>
<include name="struts/avs/house/struts-house.xml.tmp"/>
<include name="struts/basic/struts-basic.xml"/>
<include name="struts/message.properties"/>
<include name="struts/quartz/struts-quartz.xml"/>
<include name="struts/security/struts-security.xml"/>
<include name="struts/struts.xml"/>
<include name="xwork-conversion.properties"/>
</dir>
<dir name="C:/hop/haierworkspace/avs/bvs/bvs-app/target/classes">
</dir>
</classpath>
<web>
<link target="/">
<dir name="C:/hop/haierworkspace/avs/bvs/bvs-app/src/main/webapp">
</dir>
</link>
</web>
</application>
4.配置jetty:run的jvm参数
这是为jetty加载jrebel的关键。
在mvn jetty:run的JRE管理选项卡中的VM参数中加入
-noverify -javaagent:d:/jrebel/jrebel.jar
5:注意关闭eclipse自带的的扫描重启加载:
或者:
- 大小: 93.3 KB
- 大小: 88 KB
分享到:
相关推荐
在现代Java开发中,构建工具、应用服务器、热部署工具以及IDE的集成是提升开发效率的关键因素。"Maven+Jetty+JRebel+m2eclipse+Eclipse搭建Struts2开发环境"这个主题,正是围绕这些关键组件展开,旨在为开发者提供一...
在提供的文档“IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署.docx”中,可能会详细介绍每个步骤的详细操作和可能遇到的问题。而“JRebel for IntelliJ IDEA”相关的网页文件可能是官方文档或教程,...
"IntelliJ+Maven+Jetty+Jrebel"的组合正是为了解决这一问题,实现Web项目的Java代码更改后能够自动热部署。这个解决方案集成了几个关键工具,包括: 1. **IntelliJ IDEA**: 这是一款强大的Java集成开发环境(IDE)...
标题 "MyEclipse10+maven+jetty运行...总之,解决MyEclipse10+maven+jetty环境下更改代码必须重启的问题,关键在于正确配置热部署工具和插件,如JRebel,或者优化构建和服务器配置,确保代码变更能被实时识别和应用。
**JRebel IDE热部署插件** 在软件开发过程中,开发者常常需要频繁地修改代码以进行功能测试或优化。每次改动后,传统的方式是重新编译、打包,然后重启应用服务器,这无疑大大降低了开发效率。为了解决这个问题,...
**JRebel** 是一款强大的Java热部署工具,它能够实现在不重启应用服务器的情况下,实时刷新代码变更。这对于提高开发效率至关重要,因为每次修改代码后,开发者不必等待应用重启,就可以立即看到代码更改的效果。...
JRebel是一款商业的热部署工具,它能够实时反映代码更改,避免了反复重启服务器的过程。下面是使用JRebel进行热部署的步骤: 1. **安装JRebel插件**:访问JRebel官网下载并安装适合Eclipse版本的JRebel插件。通常,...
`org.zeroturnaround.jrebel-maven-plugin` 是一个针对Java开发的Maven插件,主要用于实现热部署功能。在开发过程中,我们通常需要频繁地修改代码,然后重新编译、重启应用来查看更改效果,这个过程既耗时又效率低下...
通常,Java应用服务器如Tomcat、Jetty、JBoss等都提供了一定程度的热部署支持。以标题中的"jbos热部署"为例,JBoss是Red Hat公司的一个开源企业级应用服务器,它包含了对热部署的支持。 JBoss的热部署机制主要通过...
4. **与其他工具结合**:JRebel 可以与Maven、Gradle等构建工具配合使用,实现自动化构建过程中的热部署。 **四、最佳实践** 1. **在开发阶段使用**:JRebel 主要适用于开发阶段,以提升开发效率。在生产环境中,...
**JRebel插件安装指南** JRebel是一款强大的Java...通过以上步骤,你应该能够成功地在Eclipse中安装并使用JRebel插件,实现快速的代码热部署,提高开发效率。记得及时更新JRebel版本,以获得最新的功能和性能优化。
3. **热部署支持**:JRebel支持各种应用服务器和框架,如Tomcat、Jetty、Spring Boot等,能与Maven、Gradle等构建工具无缝集成。 4. **资源管理**:除了Java类,JRebel还能处理CSS、JavaScript、HTML等资源文件的...
4. 对于特定的框架,可能还需要额外的配置,例如Spring框架的热部署可能需要调整Maven或Gradle的构建脚本。 总的来说,热部署能够显著提升开发效率,减少因频繁重启应用带来的等待时间。通过合理配置和使用热部署...
1. **热部署**:当您在IDE(如IntelliJ IDEA、Eclipse等)中编辑并保存Java类、资源文件或配置文件时,JRebel会自动检测到这些更改,并在不需重启应用服务器的情况下将它们应用到运行中的应用程序中。这显著减少了...
除了基本的热部署功能,JRebel 4.x还提供了其他一些实用特性,如资源文件的实时更新、Spring框架的配置文件更改无需重启、Maven或Gradle构建工具的集成等。 需要注意的是,尽管JRebel能显著提高开发效率,但它也会...
8. **热部署** 使用如JRebel这样的工具,可以在不重新部署整个JAR的情况下实时更新代码,大大提高开发效率。 总结来说,"web项目jar包快快快"意味着我们需要关注Java Web项目的JAR包构建优化,通过有效的依赖管理...
Spring Boot的热部署可以通过使用`spring-boot-devtools`、Spring Loaded或JRebel实现,以便在开发过程中快速刷新应用变化。 `bootstrap.yml`和`application.yml`都是Spring Boot的配置文件,但`bootstrap.yml`...
关于热部署,Spring Boot提供了Spring Loaded或JRebel等插件来实现。Spring Loaded是Spring官方提供的热部署工具,当源代码发生变化时,可以自动重新加载应用,而无需手动重启服务器。在Maven中,你可以在`pom.xml`...