更新Web应用程序的静态资源

发布于 2024-12-03 12:54:51 字数 577 浏览 0 评论 0原文

我们有一个依赖于资源的 Web 应用程序 (Java + Tomcat + Spring + Maven)。因此,app-1.0.1.war 依赖于resources-1.0.3.jar。当我们需要修复资源中的bug时,我们需要

  • 发布一个新的资源jar => 1.0.4
  • 更新web应用的maven pom中的依赖
  • 发布一个新的war => 1.0.2
  • 部署 Web 应用程序

在我们团队中,有些人认为这不是一种有效的方法。他们更愿意

  • 发布一个新的 jar
  • 将 jar 上传到服务器上

所以基本上不需要重新部署应用程序。这看起来更容易,但我可以看到这种方法的几个问题:

  • 您需要对包含资源的 jar 的名称进行硬编码。
  • 您不知道应用程序正在使用的资源的版本。

更新 Web 应用程序的静态资源的常见做法是什么?

We have a web application (Java + Tomcat + Spring + Maven) that depends on resources. So the app-1.0.1.war depends on the resources-1.0.3.jar. When we need to fix a bug in the resources, we need

  • release a new resources jar => 1.0.4
  • update the dependency in the maven pom of the web app
  • release a new war => 1.0.2
  • deploy the web app

In our team some people think that it's a not an efficient way to do. They would prefer to

  • release a new jar
  • upload the jar on the server

So basically no redeployment of the app. It seems easier but I can see several problems with this approach:

  • You need to hard code the name of the jar that contains the resources.
  • You don't know the version of the resources the app is using.

What is the common practice to update static resources of a web application?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

ぃ弥猫深巷。 2024-12-10 12:54:51

我们的项目也遵循类似的方法。

  • 发布一个新的资源jar => 1.0.4
  • 更新web应用的maven pom中的依赖
  • 发布一个新的war => 1.0.2
  • 部署 Web 应用程序

这样做有很多原因,其中一些对我来说很突出:

  • 我们的内部 jar 文件(模块)在许多项目中重复使用。旧项目可能会随着新版本的发布而中断。
  • 虽然为单个应用程序编写的单点版本可能不会造成任何问题,但重大版本可能会破坏整个应用程序。在能够进行此类发布之前,需要进行严格的集成测试。
  • 如果您具有相互依赖关系,例如主应用程序需要版本 1.0.4 而另一个模块需要 1.0.1 - 主应用程序将始终赢得这场决胜局。如果版本 1.0.4 破坏了上述模块,您必须先修复它,然后才能部署项目。

如果这些都不适合您,请考虑阅读 依赖项版本范围。像这样的事情应该可以完成您想要做的事情:

<version>LATEST</version>

编辑:

所以基本上不需要重新部署应用程序

这是不正确的,资源只会在每次运行 mvn install 时更新 - 每次构建战争时。

所以,是的,在开发过程中您将始终拥有最新的 jar,但旧的战争不会突然与最新发布的 jar 捆绑在一起。相信我,你绝对不希望这样。

您只删除了一个步骤:

  • 更新 Web 应用程序的 Maven pom 中的依赖项

您删除一个步骤会增加很多风险。查看我上面发布的链接,它可能会给您一些更合适的选择。 LATEST 可能不是您正在寻找的内容。

We follow a similar approach with our projects as well.

  • release a new resources jar => 1.0.4
  • update the dependency in the maven pom of the web app
  • release a new war => 1.0.2
  • deploy the web app

There are a number of reason to do this, these are some of the ones that stick out for me:

  • Our internal jar files (modules) are re-used throughout a number of projects. Older projects may break with new releases.
  • While point-versions that are written for a single application may not cause any trouble, significant releases could break the entire app. Serious integration testing would be required before being able to do such releases.
  • If you have inter dependencies such as the main application requiring version 1.0.4 and another module requiring 1.0.1 - the main application will always win this tie-breaker. If version 1.0.4 breaks the aforementioned module, you will have to fix it before you can deploy your project.

If none of these apply to you, consider reading Dependency Version Ranges in the Maven documentation. Something like this should accomplish what you're trying to do:

<version>LATEST</version>

Edit:

So basically no redeployment of the app

This is untrue, the resources would only be updated each time mvn install is run - every time you build a war.

So yes, you will always have the most updated jar during development but an older war would not suddenly be bundled with freshly released jars on the fly. And trust me, you definitely do not want that.

You are only cutting out one step:

  • update the dependency in the maven pom of the web app

You're adding a lot of risk to remove one step. Check out the link I posted above, it might give you some more fitting alternatives. LATEST is probably not what you're looking for.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文