每次修改都需要重新构建整个Java应用程序吗?

8

我刚开始构建Java Web应用程序和WAR文件。 我正在使用一个相当大的基于Java和JSP页面构建的Web应用程序。我们有一个ANT文件,每次进行单个更改时都会重新构建整个应用程序。 我想知道是否可能仅重新构建已修改的应用程序部分而不是整个项目。

测试需要10分钟的时间,因为我会进行更改,关闭Tomcat,运行ANT脚本,启动Tomcat,在浏览器中重新加载应用程序,这需要7分钟才能完成首次重新构建后的加载(我也很好奇它在这里做了什么?)...基本上是完全的地狱测试。

如果有人能提出更好的测试策略,那就太棒了!还有可能让ANT脚本仅重新构建已修改的类。


2
将您的项目分成不同的库,然后您只需要重新构建已修改的组件。如果问题是您只需修改Web应用程序本身(例如JSP、JavaScript或Servlet/Controller类中的某些内容),那么您就没有运气了。顺便说一句,知道时间很宝贵,每次更改都要付出很多代价,那么请进行适当的更改,而不是进行1行更改以测试更改是否有效/无效。 - Luiggi Mendoza
@LuiggiMendoza 谢谢!那听起来像是一个可行的解决方案。 - Sunny Patel
你可以通过调试已部署的WAR包来调试Tomcat本身。这将需要一个自定义的Tomcat安装程序,一个未压缩的WAR包,并在IDE中进行一些技巧操作,以使其相信Tomcat项目在您打开的所有其他项目中都有源代码(以便您可以进行步进式调试和使用热代码替换)。此外,您还需要将部署的WAR包中的JSP文件替换为指向主项目中JSP文件的链接,以使自动重新加载功能正常工作,并在Tomcat中启用自动重新加载。总的来说,这不是一项容易的任务,可能会使您的目的无效 - 测试... - Tassos Bassoukos
“我也很好奇它在这里做什么?” - 嗯,由于您的网站每次更改Java文件时都必须重新编译,因此您正在经历所谓的“启动旋转”。该网站基本上正在重新编译和准备呈现自己。C#/ASP.NET Web应用程序也会发生这种情况。 - Brian
2
如果是这样,Java 怎么比 PHP(或任何其他服务器端解释语言)更好呢?如果我想测试我的 PHP,我只需刷新页面即可。而在 Java 中,我必须重新编译整个项目并坐在那里等待 6 分钟才能测试一行代码。 - Kellen Stuart
1个回答

2

有几件事情可以做:

  1. 可以在tomcat/temp目录下修改jsp文件。更改将立即生效,无需重新编译/加载。

  2. 可以使用远程Tomcat调试(从Eclipse开始)。这种调试允许您更改源代码,此更改将立即传播到Tomcat。

  3. 组织ant脚本的最佳方式是将编译分成几个jar文件,然后创建war文件。然后,对于一个更改,只会在一个jar文件中进行重新编译。

  4. 如果为上下文指定reloadable=true,则不需要在重新部署时重新启动Tomcat。


谢谢提供列表!选项2、3或4是否可以避免@Brian所指的“启动时间”问题? - Sunny Patel
1
我并没有完全理解 spin-up。在不重启 Tomcat 的情况下重新加载可能会导致内存问题,特别是在性能较弱的服务器上运行大型应用程序时。因此,在生产环境中,我们大多数情况下会重新启动 Tomcat。然而,对于测试来说,潜在的内存问题并不那么重要。过一段时间后,人们可以感觉到重新加载多少次不会引起内存问题。Tomcat 7 在内存管理方面可能比前任产品更好。 - Alex

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接