2010-06-09 106 views
1

我正在做一些研究,以便我可以高效地使用war文件部署应用程序。我目前所做的是每当有一个版本发布时发布战争文件。如何更新war文件中的单个文件

这意味着无论变化有多小,我都必须构建和交付组成应用程序的所有文件,每次都有变化。我在想,也许这不是正确的做法。

例如,如果有一个CSS文件的变化,我不得不重建战争文件,其中将包括所有文件。这包括重新编译所有* .java文件。

在上面的例子中,是否可以用css文件构建一个war文件并将其部署到tomcat服务器,并让Tomcat只替换css文件并保持原样?

回答

5

你可以做一个“爆炸”的部署,这只是解压缩的war文件。然后你可以更新单个文件。为此,您将“解包”目录置于您想要拥有该战争文件的位置。如果你使用tomcat并查看deploy目录,你会发现tomcat无论如何都是这样。

尽管如此,我们并不能保证所做的更改将被提取。 CSS文件和图像和o forth应该没有问题,但JSP,模板文件等往往被编译和缓存,你必须做一些配置魔术,让应用程序替换这些工件。通常情况下,这是以性能为代价的,当类被替换但不能从内存中释放时,可能导致Dreaded PermGen错误。如果你这样做,确保你在适当的时候定期反弹你的服务器,并且利用virtualvm或者jconsole或者类似工具来关注PermGen内存区域。

+0

当您提到deploy目录时,是否指“webapps”目录Tomcat? 什么会导致PermGen错误?我认为如果你用新的课程替换课程,它将会被替换? 如果我只用一个文件制作战争文件,它会将tomcat删除现有的文件夹? (我应该自己试试!) – ziggy 2010-06-10 09:05:10

+0

类被移动到永久代,默认情况下不会清扫。所以换出的类不会导致释放PermGen中的内存。 如果您创建了一个包含单个文件的战争,如果我没有记错,它将删除完整的展开文件夹。简单地将文件放置就位更容易。某些文件触发了完整的网站重新部署,我认为web.xml。至少在JBoss中它是这样做的。 – 2010-06-10 09:21:53

+0

我必须尝试web.xml部署,因为这意味着如果部署了web.xml,则其他所有内容都必须重新部署。 – ziggy 2010-06-10 17:45:08

相关问题