gpt4 book ai didi

java - Maven - 部署大型 war 文件

转载 作者:搜寻专家 更新时间:2023-11-01 03:29:35 25 4
gpt4 key购买 nike

这个问题和这个有点相似Best way to deploy large *.war to tomcat所以这是一本很好的读物,但请继续阅读我的问题,最后会有所不同...

使用 maven 2 我的 war 文件非常大 (60M)。我将它们部署到一组 tomcat 服务器上,只是复制文件花费的时间太长(每场 war 大约 1m)。

最重要的是,我添加了一个 RPM 层,它将 war 打包到一个 RPM 文件中(使用 maven 的 rpm 插件)。当 RPM 在目标机器上执行时,它会清理、“安装”war(只需复制它)、停止并启动 tomcat(这就是我们在这里做事的方式,没有热部署)并在中设置适当的上下文文件地方。这一切都很好。
然而,问题在于 RPM 文件太大且复制速度慢。几乎占据整个空间的自然是war文件。

我还没有看到任何现成的解决方案,所以我正在考虑自己实现一个解决方案,所以我将在下面对其进行描述,并且此描述有望有助于解释问题域。我很高兴听到您对计划的解决方案的想法,并且更好地向我指出其他现有解决方案和随机提示。

war 文件包含:

  1. 应用程序 jar
  2. 第三方 jar
  3. 资源(属性文件和其他资源)
  4. WEB-INF 文件,例如 JSP、web.xml、struts.xml 等

大部分空间都被 #2,第 3 方 jar 占用了。
第 3 方 jar 也安装在我们公司的内部 Nexus 服务器上,因此我可以利用它。

你现在可能已经猜到了,所以计划是创建仅包含应用程序 jar(由我公司编写的)、资源和 WEB-INF 内容的小型 war ,并向 RPM 安装脚本添加智能将在需要时复制第 3 方 jar 。
RPM 允许您在安装之前或之后运行任意脚本,因此计划是在构建 war 时使用 mvn 编写第 3 方依赖项列表并将其作为资源添加到 RPM,然后在安装 RPM 时 RPM 安装脚本将运行在所需的第 3 方 jar 列表上,仅当它们尚不存在时才从 nexus 下载新的 jar。
如果不使用,RPM 将不得不删除 jar。
RPM 还必须为 tomcat 重建 war 以使其爆炸,或者将第 3 方 jar 添加到 common/lib 或类似的东西,尽管我们每个 tomcat 都有一些网络应用程序,所以从这个意义上讲它会使事情变得复杂。也许自己爆炸 jar ,然后将第 3 方 jar 复制到 WEB-INF/lib

感谢您的意见:)

最佳答案

我们在目标机器上有一个目录,其中包含我们正在使用的所有第三方 jar(大约 110Mb)。这些 jar 使用的命名编码约定包括它们的版本号(asm-3.2.jar、asm-2.2.3.jar ...)。添加第三方的新版本时,我们不会删除旧版本。

部署时,我们的 jar 文件仅包含我们在构建中编译的业务逻辑类和资源(无第三方)。类路径在 jar manifest 中定义我们在运行时挑选它应该使用的第三方。我们正在用 ant 做这件事,没有涉及 maven,我们的系统中有超过 25 种类型的服务(非常“soa”,虽然我不喜欢这个流行词)。该业务逻辑 jar 是启动进程时 jvm 类路径中唯一的 jar,它也由我们的代码 repo 修订号进行版本控制。如果您返回到我们代码的旧版本(回滚),它可能使用旧的第三方 jar,它仍然可以工作,因为我们不会删除旧 jar。新的第三方 jar 应该在使用它们的业务代码之前传播到生产机器。但是一旦他们在那里,他们就不会在每次部署时被重新推送。

总体而言,我们倾向于简单性(即不是 OSGi)并且我们不使用 Maven。

关于java - Maven - 部署大型 war 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4192940/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com