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)。

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


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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值