gpt4 book ai didi

java - 部署一个基于 Spring 的 WAR,其 JAR 依赖项已外部化

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:36:42 25 4
gpt4 key购买 nike

我有一个 Spring 应用程序,它有很多依赖项(18 兆字节的 JAR 文件..) - 现在,当我在远程 Tomcat 6.0 服务器上进行测试时,我不想上传那 19 兆字节的依赖项,只需上传类。很简单,对吧?

我不能让这该死的东西工作。

我正在使用 Eclipse 3.4,如果在 Java Build Path->Order and Export 中删除所有依赖项的导出,我会得到一个不错的小型 WAR。

所以这是我尝试过的:

我将所有库上传到服务器,并将它们放在 Tomcat 的 common/lib 中。该目录不存在,所以我创建了它并修改了 catalina.properties:

shared.loader=${catalina.home}/common/lib/*.jar

我尝试了很多其他配置,但都没有用。重启服务器,部署的war启动失败。具体来说:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderList$java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener       at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1

它正在尝试加载 Log4J 监听器,但在其类路径中找不到它。 listener所在的spring lib在common/lib。

此外 - 当我部署完整的 18 兆字节 war 时,它工作得很好。一切初始化,应用程序启动。当然,它在本地也能正常工作。

哦 - 我已经用 extras 文件夹中的 JAR 替换了硬编码的日志记录 JAR,以允许 Log4j 工作。

这里有什么帮助吗?我不知道为什么这不起作用。

最佳答案

“我有一个 Spring 应用程序,它有很多依赖项(18 兆字节的 JAR 文件..)- 现在,当我在远程 Tomcat 6.0 服务器上进行测试时,我不想上传那 19 兆字节的文件依赖项,然后上传类。很简单,对吧?”

我不明白 - 19MB 不是很多。你最好只打包一个 WAR 并完成它。

我建议您在自己相同的 Tomcat 实例上进行本地测试,使其全部正常运行,然后将 WAR 部署到远程 Tomcat 实例。

更新:我将这些 JAR 放入 Tomcat 的/lib 目录时遇到的一个问题是,现在您部署到该实例的每个应用程序都会看到这些 JAR - 将它们更改为一个,所有都会受到影响。如果将 JAR 放在每个单独的 WEB-INF/lib 中,则可以修改每个应用程序而不影响其他应用程序。成本是重复的 JAR 和磁盘空间,这很便宜。

另一个问题是,如果您必须从 devl->test->prod 迁移,现在每个环境都必须部署相同的 JAR 才能让您的应用程序正常工作。错过一个,你就崩溃了。您的应用程序依赖于这些依赖项是否可用。如果它们不在服务器上,那你就不走运了。将控制权掌握在自己手中,并将 JAR 打包到 WAR 文件中。

关于java - 部署一个基于 Spring 的 WAR,其 JAR 依赖项已外部化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1100298/

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