Java Web项目的保存和刷新

如何配置计算机以保存并刷新Java Web项目? 当您向开发人员提出此问题时,答案以“哦,好吧……”开头,并以某种可行的方式继续描述。 每个人都有自己的方式。

首先–为什么需要这个? 因为执行复制和重新启动服务器是生产力的杀手-浪费大量时间。 如果不提高将项目与容器同步的工作效率,即使是进行简单的修复,也可能需要完整的构建和部署周期才能进行测试。 这可能会花费很多时间,具体取决于项目的规模。

我会写下一些内容,以补充我的StackOverflow答案 :

  • IDE集成– IDE可以选择添加本地服务器并将项目部署到该服务器。 这需要附加的插件,配置哪些工作空间文件在servlet容器中的位置,并且并不总是有效。 当图片中有Maven时,它要么不起作用,要么需要另一个插件(如我的这个答案所述 )。
  • 您使用一些工具来同步目录结构。 在Eclipse中,有FileSync插件 ,它使您可以配置将哪些工作空间文件放到servlet容器中的什么位置。 可能存在执行相同操作的其他工具(例如unison ),或者您可能已经编写了一些脚本或插件来执行此操作。
  • 从maven运行servlet容器(如果使用maven)–使用tomcat插件或jetty插件即可 。 缺点是,要在调试模式下运行,您需要附加外部调试器(而不是为此使用内置的IDE服务器集成)。 并且它需要插件配置。 另外,请记住,如果使用码头(较快速的选项)进行开发,那么如果您的生产容器是tomcat,则行为可能会有所不同。 麻烦不大,但仍要牢记一些。
  • 手动复制项目文件–一开始听起来并不可怕,但随后又开始困扰您–毕竟,这是一项要求自动化的任务。

因此,现在您已将类文件和资源(css,javascript,图像,配置文件)复制到servlet容器。 但是,为了使它们起作用,您需要一些HotSwap功能。 也就是说,让jvm重新加载类定义。 有四个选项:

  • 常规HotSwap –只需在调试模式下运行servlet容器即可。 每当更改类文件时,就可以交换方法的主体。 但是,更改方法或类签名需要重新启动。 我一直使用此选项,而且还没有那么痛苦–在所有方法签名重新定义和重构都不会经常发生之后,即使这样做了,也可以重新启动服务器,因为您不必专注于使某些特定功能起作用。
  • DCEVM – VM增强功能,允许完全重新加载类。 我没有使用过它,但是如果它可以正常工作,它应该可以解决上面提到的签名重新定义问题。
  • JRebel –商业替代品。 我从未使用过它,我听说过它很好,而且我知道还有很多额外的功能,可以让您在各种框架中使用它,例如,重新配置spring上下文不需要重新启动。 我不认为这些事情经常发生,因此我从不推荐JRebel(商业化),但这是您应该考虑的重要选择。
  • 每次更改都重新启动服务器。 如果项目很小,这将花费很少的时间,因此可以选择。 但是我什至不建议在小型项目中使用它,因为至少HotSwap易于配置(而且您仍然需要调试模式)

如此众多的选择–在Java世界中如此典型。 他们或多或少地工作良好。 但是,我决定再添加一个选项,该选项几乎具有零配置– aardWARk 。

通过将aardwark.war文件放入您的tomcat中并重命名它,使其名称包括项目目录的路径,并进行同步处理,即可工作。 请注意,这是添加到上面第一个列表的选项。 对于热交换,您仍然需要第二个列表中的三个选项之一。 在项目页面上有一个更详细的设置指南,但有几点需要强调:

  • 它仅适用于Maven项目。 为了具有零配置,需要使用Maven的Convention-over-configuration
  • 它独立于IDE,独立于servlet容器。
  • 它完成了我认为上面没有其他解决方案可以做的事情(也许除了JRebel之外)-它也将同步依赖于Maven的项目。 通常,您有一个多模块项目,其中一些项目打包为jar,而其他(网络)项目则依赖于它们。 但是,您需要能够在“核心”模块中更改类,并立即查看Web应用程序中的更改。 这将意味着重新包装并重新装入罐子。 AardWARk只需解析pom,找到相关项目并将其类复制到classpath,即可覆盖现有定义
  • 支持多个项目,还支持通过属性文件进行配置(如果您不想或无法命名war文件来包含项目路径)
  • 更改pom时不会同步jars文件-您需要重建并重新启动。 嵌入Maven和运行依赖关系目标的一些解决方法,但是如果添加了新的jar,则无论如何都需要重新启动。
  • 它之所以被称为aardWARk,有一个简单的原因-最好在您的项目之前加载此war文件。 不一定,因为仅同步jar文件才需要,但是最好同步。 Servlet容器不能保证Webapp的加载顺序,但是很可能是按字母顺序选择它们的,因此很有用(出于明显的原因,用war代替var)。

我希望它是一个有用的工具,如果人们开始使用它并提供反馈,我将感到非常高兴。

参考: Bozho的技术博客博客中的JCG合作伙伴 Bozhidar Bozhanov的 Java Web Project 保存和刷新 。

翻译自: https://www.javacodegeeks.com/2013/11/save-and-refresh-with-java-web-projects.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/366877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql alter怎么用,mysql alter话语用法

mysql alter语句用法//主键ALTER TABLE tablename add new_field_id int(5) UNSIGNED DEFAULT 0 NOT NULL anto_increment,ADD PRIMARY KEY (new_field_id);//增加一个新列mysql>ALTER TABLE tablename ADD fieldname fieldtype如:ALTER TABLE t2 ADD d TIMESTAM…

《React 学习之道》The Road to learn React (简体中文版)

通往 React 实战大师之旅:掌握 React 最简单,且最实用的教程。 前言 《React 学习之道》这本书使用路线图中的精华部分用于传授 React,并将其融入一个独具吸引力的真实世界 App的具体代码实现。 如何掌握 React 存在特别多的路线图。本书提…

Linux下设置和查看环境变量

Linux的变量种类 按变量的生存周期来划分,Linux变量可分为两类: 1 永久的:需要修改配置文件,变量永久生效。 2 临时的:使用export命令声明即可,变量在关闭shell时失效。 设置变量的三种方法 1 在/etc/profi…

vue.js(三)

这里该记到vue的组件了&#xff0c;组件基础篇 1.vue组件的基本书写方式 Vue.component(button-counter, {data: function () {return {count: 0}},template: <button v-on:click"count">You clicked me {{ count }} times.</button> }) 上面定义了一个名…

RIP GlassFish –感谢所有的鱼。

我们都听说过它的到来。 昨天&#xff0c;JavaEE和GlassFish的官方路线图更新已发布 。 从标题开始&#xff0c;整个帖子基本上都是关于一件事的&#xff1a;今天我们知道的GlassFish Server已从完整的产品转为玩具产品。 从Sun到Oracle的漫长道路 从一开始&#xff0c;GlassF…

Nuxt中如何使用Vuex-Store异步获取数据

Nuxt是一个基于Vue.js的通用型框架&#xff0c;它集成了使用Vue开发的绝大数组件/框架。 长话短说如何在Vuex-store中获取异步数据呢&#xff1f; 在Nuxt中由于集合了Vuex还有其他的一些配置&#xff0c;大大的方便了我们使用Vuex&#xff1b;在Nuxt官方文档中写到&#xff1a;…

Struts2面试问答

Struts2是用Java开发Web应用程序的著名框架之一。 最近&#xff0c;我写了很多Struts2教程 &#xff0c;在这篇文章中&#xff0c;我列出了一些重要的Struts2面试问题以及答案&#xff0c;以帮助您进行面试。 什么是Struts2&#xff1f; Struts1和Struts2之间有什么区别&…

php怎么改标题,PHP – 如何更改包含header.php的页面标题?

扩展Dainis Abols答案,以及关于输出处理的问题,考虑以下&#xff1a;你的header.php标题标签设置为< title>&#xff05;TITLE&#xff05;< / title&gt ;;“&#xff05;”很重要,因为几乎没有人输入&#xff05;TITLE&#xff05;所以你可以在以后使用str_repla…

基于canvas的骨骼动画

最近学习到了一种关于canvas的骨骼动画&#xff0c;听这个名字就知道他和canvas之前的动画不同&#xff0c;不知道你有没有兴趣了解一下呢&#xff1f;关于骨骼动画最初是无意间在腾讯团队上看到的&#xff0c;但是由于他官网的教程是在是少之又少&#xff0c;也就仅有一个小de…

Python APSchedule安装使用与源码分析

我们的项目中用apschedule作为核心定时调度模块。所以对apschedule进行了一些调查和源码级的分析。 1、为什么选择apschedule&#xff1f; 听信了一句话&#xff0c;apschedule之于python就像是quartz之于java。实际用起来还是不错的。 2、安装 # pip安装方式 $ pip install ap…

短信验证登录实现流程

以手机号码为参数调用后台接口发送登录验证码&#xff0c;注意同一号码发送短信的时间间隔和每日次数阈值后台接口按规则要求生成验证码将手机号码(Key)和验证码(Value)存入服务器缓存&#xff0c;同时设置缓存有效时间将验证码填充短信模板作为短信内容&#xff0c;调用第三方…

NetBeans 7.4的本机Java打包

成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下一个代码清…

基于Vue开发一个日历组件

最近在做一个类似课程表的需求&#xff0c;需要自制一个日历来支持功能及展现&#xff0c;就顺便研究一下应该怎么开发日历组件。 更新 2.23修复了2026年2月份会渲染多一行的bug&#xff0c;谢谢深蓝一人童鞋提出的bug&#xff0c;解决方案是给二月份的日历做特殊处理&#xf…

php 打开word乱码怎么办,如何解决php word 乱码问题

php word乱码的解决办法&#xff1a;首先打开“/Writer/Word2007/Base.php”文件&#xff1b;然后添加“$objWriter->writeAttribute(‘w:eastAsia’, $font)”内容&#xff1b;最后保存修改即可。PHPword解决中文乱码一、增加东亚字体支持打开并编辑路径/Writer/Word2007/B…

MySQL5.7本地首次登录win10报错修改

1、打开MySQL目录下的my.ini文件&#xff0c;在文件的最后添加一行“skip-grant-tables”&#xff0c;保存并关闭文件。&#xff08;Win10默认安装&#xff0c;my.ini在C:\ProgramData\MySQL\MySQL Server 5.7&#xff09; 2、重启MySQL57和MySQL Router服务。 3、通过命令行窗…

Python-函数的参数

Python定义函数非常简单&#xff0c;而且具有很高的灵活度。函数的参数传递方式多种多样。需要记忆和理解。 1.位置参数&#xff1a; 举例&#xff0c; def power(x): return x * x power&#xff08;x&#xff09;函数中&#xff0c;x就是一个位置参数。调用时&#xff0c;必须…

Java开发人员访谈的MindMap

多年来&#xff0c;我曾在许多Java开发人员访谈中担任小组成员。 之前&#xff0c;我曾写过一篇标题为“成功进行软件工程师技术面试的7大技巧”的文章&#xff0c;其中涵盖了很少的一般准则。 在本文中&#xff0c;我将分享一个思维导图&#xff0c;其中包含Java开发人员访谈中…

php发邮箱验证码找回密码,织梦dede会员通过邮箱找回密码方法

首先打开文件&#xff1a; /member/resetpassword.php 这是织梦会员找回密码的核心文件&#xff01;在148行有这么一句&#xff1a; showmsg(对不起&#xff0c;临时密码错误, -1); 看来问题就在这了&#xff01; 但是怎么引起的呢&#xff0c;别急继续看代码从125行往下看&a…

送给大家一个好看的简历神器

很多人看到里边有好看的东西就习惯性的点进来看看&#xff0c;还一边点一边想 —— 好看的简历我见多了&#xff0c;你这个又能好看到哪里去。我想差不多可以&#xff1a; 哪里吧因为最近有在准备简历&#xff0c;就习惯性的找一找有没有现成的简历模板。结果全是付费的&#x…

PHP简单实现单点登录功能示例

1.准备两个虚拟域名 127.0.0.1 www.openpoor.com127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.PHP 123456789101112131415161718<?phpsession_start();?><!DOCTYPE html><html><head><meta charset"UTF-8"/&…