1

我正在客户站点部署战争文件。War 文件包含 lib 文件夹,其中包含依赖的 jar,例如

/lib/app-01.jar /lib/spring-2.5.1.jar /lib/somefile-1.2.jar ... ...

如果我们需要更新让我们说 app-01.jar 到 app-02.jar,有什么优雅的解决方案吗?这些依赖的 jar 是如何作为行业标准打包到 WAR 文件中的?

打包那些没有版本号的依赖jar是个好主意吗?例如

/lib/app.jar /lib/spring.jar /lib/somefile.jar ... ...

编辑说明:实际上,War 被部署到 Windows 或 Linux 平台上的 Webshpere、WebLogic、Tomcat 上。客户的 IT 部门参与部署

4

2 回答 2

2

可能最优雅的解决方案就是生成一场新战争并部署它。

以下是原因:

  • 如果您担心正常运行时间,一些应用程序服务器支持并行部署。这意味着您可以部署新版本并在旧版本的同时启动它。并在没有人使用时停止旧的。(我在 WebLogic 上使用过它,就像 5 年前一样,所以我想这是一个常见的功能)。但这种功能只有在您部署新的 .WAR 版本时才有效。

  • WAR 可能是使用 Maven、Ant 或 Gradle 生成的,因此更改依赖版本并执行 amvn package通常比解压缩 WAR、更改它并再次压缩它更快且更不容易出错。

  • 所有应用程序服务器都提供“热替换”功能,通过刷新类加载器来工作。它适合开发,但在生产中可能会出现问题(类加载器泄漏可能很常见,由不正确的初始化或不良编程实践引起的问题可能会给您带来意想不到的错误,例如拥有两个版本的类)

关于 JAR 文件名:我建议保留文件名上的版本。大多数 JAR 包含 META-INF/Manifest.mf 中的版本信息。但是,如果由于某种原因您必须知道哪些版本正在使用您的应用程序...打开每个 JAR 文件以查看清单中的版本是很多工作。

作为最后的建议。如果您不使用任何自动构建工具...采用一个(看看Gradle,这很好)。更新库版本,通常包括更改构建文件上的版本号并执行类似gradle deploy. 即使您不是开发人员,而是负责 devops 的人,拥有自动化构建也将帮助您进行部署和更新。

于 2013-01-18T00:20:33.717 回答
0

在 Tomcat 中,我认为文件解压缩后的战争无关紧要。您可以忽略战争并将新/更改的文件提取到正确的 webapp 目录中(与战争同名的目录。)

于 2013-01-17T23:37:22.073 回答