`
wang5598
  • 浏览: 112912 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Maven项目中的热部署

阅读更多

在Maven项目中实现热部署

wangyq

 

    使用maven作为项目管理工具,以jetty-maven-plugin插件作为内置的J2EE容器进行web项目开发,在很多时候需要实现项目代码的热部署,包括java编译后的class文件,Css\Js\Html等静态资源,视图模板如FreeMarker、Velocity、Httl等,都需要实现热部署,下面讲解下实际开发工作中的解决办法:

 

    1、使用 jetty-maven-plugin插件作为项目内嵌容器的话,是没法直接使用Myeclpse10自带的Servers面板中的部署功能,这时为了避免每次自己手动去执行“Run as -->Maven build-->clean compile package...”等命令,需要自己配置一个外部工具来提供一个快捷的启动方式,配置步骤如下:点击菜单“Run-->External Tools-->External Tools Configurations”,



 

在Main标签中输入Maven的安装目录地址,Arguments中填入"Jetty:run"的命令,Working Directory选择当前正在开发的项目,在Environment标签中,添加MAVEN_OPTS标签,标签值为“
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4010,server=y,suspend=y”,解释下suspend=y表示当遇到代码中打的断点时挂起当前线程以进行调试,Server=y表示已服务器模式运行(相对于client模式),addres=4010表示通过该端口对提供监听(4000端口会被QQ占用不推荐),-Xdebug是通知JVM工作在DEBUG模式下,-Xrunjdwp是通知JVM使用(java debug wire protocol)来运行调试环境。该参数同时了一系列的调试选项:transport指定了调试数据的传送方式,,dt_socket是指用SOCKET模式,另有dt_shmem指用共享内存方式,其中,dt_shmem只适用于Windows平台。然后在Commen标签中,选中Display in favorites menu(External Tools),这样该工具就会在控件工具栏中显示出来,可以直接点击使用了;

 

    2、使用maven管理项目的时候,需要通过调用remote java Application实现对本机上运行的maven项目的运行监控,需要配置的过程如下,选中项目右键-->Debug AS-->debug configurations 后在面板中选择“Remote Java Application”新建一个配置:

 在port中设置和MAVAEN_OPTS中相同的端口号,在Commen标签中选择在
Display in favorites menu(Debug),就可以了;

 

    3、设置Jetty的一些参数,以实现热部署;Jetty启动时候需要读取webdefault.xml文件的内容,在webdefault.xml定义useFileMappedBuffer为false即可实现(开发时建议设为false,正式运行的时候建议设为true以提高系统响应速度),另外建议将 <locale-encoding-mapping>中zh的编码也设置成UTF-8(默认是GBK,有时候会出现乱码);该xml文件提供在附件中了,用户可以自己去jetty的jar包中找该文件修改下参数值就可以了;修改完成后,将该文件放在src/main/resources/下面,然后在POM.XML中配置该文件:

 

<plugin>
	<groupId>org.mortbay.jetty</groupId>
	<artifactId>jetty-maven-plugin</artifactId>
	<version>8.1.12.v20130726</version>
	<configuration>
	   <scanIntervalSeconds>10</scanIntervalSeconds>
	   <webAppConfig>
		<contextPath>/gtcloud</contextPath>
            <defaultsDescriptor>src/main/resources/webdefault.xml</defaultsDescriptor>
           </webAppConfig>
	</configuration>
</plugin>

 这一步实现完成后能完成对静态资源(CSS\JS\IMAGE等)热部署;如果需要实现对class文件的热部署,还需要在之前的外部工具的环境变量中添加参数,在MAVEN_OPST中继续添加“-Djetty.reload=automatic -Djetty.scanIntervalSeconds=5”以实现对java文件的热部署

 

 

    4、另外还有一些模板文件如Velocity\Freemarker\Httl等,因为存放位置是在WEB-INF/templates下面,很多时候文件改动也不能实现热部署,这时候需要结合具体的模板来修改,比如Httl(这是淘宝推荐使用的视图模板技术)可以在MAVEN_OPTS中继续追加参数“-Dhttl.reloadable=true”来实现,其他的模板基本实现也都差不多

 

    最终的MAVEN_OPTS中的参数值为:“-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=4010,server=y,suspend=y -Djetty.reload=automatic -Djetty.scanIntervalSeconds=5 -Dhttl.reloadable=true”;

 

    5、最后一步验证以上步骤是否正常,启动服务(启动外部程序实现对指定端口的监听),然后在启动Remote Java Application来实现运行监控;


 

点击按钮后console会打印Listening for transport dt_socket at address: 4010 的提示信息
 点击后会使出容器启动信息和项目信息;这时候更改任何文件,刷新页面,页面都会显示出最新效果大笑~

 

    结合上面4个步骤,项目中所遇到的所有文件的修改都能实现热部署了,也不用借助于JRebel等插件提供的额外功能,一切都是这么滴简单~~~

--------------------------------------

ps:不好意思,我之前上传的附件中没有把webdefault.xml的配置文件放上来,抱歉啊,现在补上了;class文件的自动加载实际上是有赖于这个xml文件的。

 

  • 大小: 107.5 KB
  • 大小: 77 KB
  • 大小: 55.8 KB
  • 大小: 19.6 KB
  • 大小: 24.5 KB
1
0
分享到:
评论
3 楼 意中人_ix 2017-11-09  
到最后一步,执行remote_gtcloud后出现问题:

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 13.642 s
[INFO] Finished at: 2017-11-09T14:08:30+08:00
[INFO] Final Memory: 10M/122M
[INFO] ------------------------------------------------------------------------
[ERROR] No plugin found for prefix 'Jetty' in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [local (C:\Users\Administrator\.m2\repository), nexus (http://***********/repository/maven-public/)] -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/NoPluginFoundForPrefixException



2 楼 wang5598 2014-07-04  
这个需要把webdefault.xml文件放到webAppConfig的配置中的。之前忘记上传webdefault.xml文件了,抱歉
1 楼 bendan123812 2014-05-09  
为什么我这样弄了以后修改java文件还是会自动重启服务?

相关推荐

    maven项目下用 jetty 启动热部署

    当我们使用Maven构建Java Web项目时,结合Jetty服务器,可以实现项目的热部署功能,即在开发环境中修改代码后无需重新启动服务器,改动就能实时生效,极大地提高了开发效率。 在Maven项目中启用Jetty热部署,主要...

    Maven工程Tomcat热部署详解.pdf

    在进行Maven工程的Tomcat热部署详解时,首先需要掌握Java后台开发中对于Tomcat热部署的基本知识。这涉及到Java环境的搭建,Tomcat的安装,以及Maven工程中对于热部署的配置方法。 Java环境的搭建是热部署的前提。在...

    maven集成tomcat支持热部署

    本篇将详细介绍如何通过Maven集成Tomcat,实现项目的热部署,从而提高开发效率。 首先,集成Maven与Tomcat的核心在于Maven的插件管理。我们需要在项目的`pom.xml`文件中引入`maven-eclipse-plugin`和`maven-war-...

    Maven项目热部署、nginx反向代理负载均衡

    ### Maven项目热部署与Nginx反向代理负载均衡详解 #### Maven项目热部署 热部署,也称为热更新,是指在服务器不重启的情况下更新应用的功能。这种方式在开发过程中非常实用,可以有效减少每次修改代码后重启服务器...

    maven工程配置Tomcat热部署

    在用maven项目的时候,很多时候不想去再把项目部署到Tomcat上,然后发布并启动,这个时候我们就可以运用Tomcat热部署来配置,只需要再maven的配置文件加上一小段代码即可,非常方便! 启动的时候直接:右键项目--...

    maven多模块项目+jetty热部署实例源码

    ** Maven多模块项目详解 ** ...通过这个实例源码,你可以学习如何在Eclipse中配置Maven多模块项目,并结合Jetty进行热部署。了解并实践这些知识点,将有助于你快速构建和调试Java Web项目,提高开发效率。

    Intellij IDEA下建立maven管理的web项目,配置jetty热部署

    在本文中,我们将学习如何使用 Intellij IDEA 建立一个基于 Maven 管理的 Web 项目,并配置 Jetty 热部署。 知识点 1:Intellij IDEA 中的 Maven 项目 Maven 是一个基于项目对象模型(Project Object Model,POM)...

    配合m2eclipse,改造tomcatPluginV321根据maven的依赖自动热部署

    标题中的“配合m2eclipse,改造tomcatPluginV321根据maven的依赖自动热部署”涉及了两个主要的开发工具集成:M2Eclipse(Maven插件)和Tomcat Plugin V321,以及它们如何协同工作以实现基于Maven依赖的自动热部署。...

    Maven构建并热部署一个简单的Web Project

    ** Maven构建并热部署简单Web项目 ** 在Java Web开发中,Maven是一个不可或缺的工具,它通过自动化构建过程,管理项目的依赖关系,使得开发者能够更专注于代码编写。本篇文章将详细讲解如何使用Maven来构建并实现一...

    在Eclipse中Tomcat和Maven插件相互配合进行热部署

    这个过程涉及到了源码管理和自动化构建工具Maven,以及集成开发环境Eclipse中的服务器适配器Tomcat,它们共同助力实现项目的热部署,即代码修改后无需重启服务器即可看到更新效果。 首先,Maven是一个强大的项目...

    maven-eclipse-tomcat热部署

    【 Maven 热部署在 Eclipse 和 Tomcat 中的实践】 Maven 是一个强大的构建工具,广泛用于Java项目管理,它负责构建、依赖管理和项目信息管理。在开发Web应用程序时,结合Eclipse集成开发环境(IDE)和Tomcat服务器...

    Maven 安装插件 glassfish热部署

    本文将详细介绍如何使用Maven安装插件并实现Glassfish的热部署,以提高开发效率。 首先,我们需要确保Maven已经正确安装并集成到Eclipse开发环境中。在Eclipse中,可以通过Help -&gt; Install New Software...,然后...

    IDEA配置热部署

    IDEA配置热部署IDEA配置热部署IDEA配置热部署IDEA配置热部署

    Maven +Tomcat+m2eclipse的热部署(hot deploy)

    通过上述步骤,我们不仅配置了Tomcat的管理用户,定义了Maven中的本地服务器,还创建了一个可以进行热部署的Maven Web项目。这对于快速迭代开发、减少等待时间有着显著的积极作用。然而,需要注意的是,虽然热部署...

    IntelliJ IDEA使用maven实现tomcat的热部署

    在IntelliJ IDEA中,我们可以使用maven插件来实现tomcat的热部署。maven是apache开发的一款基于项目对象模型(POM)的项目管理工具。它可以帮助开发者自动化编译、测试、打包、部署等步骤。 要使用maven实现tomcat...

    Intellj构建和部署Maven Web项目详解

    - **Options**:设置热部署等功能。 #### 五、总结 通过上述步骤,我们不仅创建了一个Maven Web项目,还学习了如何利用IntelliJ IDEA进行项目配置、打包和部署。这对于开发基于Java的Web应用程序来说是非常重要的...

    update-site-jrebel eclipse maven热部署插件

    标题中的"update-site-jrebel eclipse maven热部署插件"指的是Eclipse集成开发环境(IDE)中的一个插件更新站点,它专门针对JRebel和Maven项目提供了热部署功能。JRebel是一款强大的Java应用热部署工具,能够实现在...

    maven-tomcat自动部署

    然而,手动部署在大型项目或持续集成环境中并不高效,这就引出了"Maven-Tomcat插件"。 Maven提供了tomcat7-maven-plugin(对于Tomcat 7)和tomcat8-maven-plugin(对于Tomcat 8及以上版本),这些插件允许我们在...

    SSM项目频繁打成war包部署,使用tomcat和maven实现热部署配置

    现在,当你在IDEA等开发环境中进行代码修改后,只需要运行Maven的`tomcat7:redeploy`命令,就可以自动将修改后的应用重新部署到远程Tomcat服务器上,实现了热部署。 然而,需要注意的是,虽然这种方式提高了部署...

Global site tag (gtag.js) - Google Analytics