java – 部署基于Spring的WAR及其JAR依赖项外部化

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

我无法得到该死的东西.

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

所以这就是我尝试过的:

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

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

我尝试过其他一些配置,但都没有用.重启服务器,部署战无法启动.特别:

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监听器,它在类路径中找不到它.监听器所在的弹簧库是共同的/ lib.

此外 – 当我部署完整的18兆字节战争时,它的工作正常.所有内容和应用程序启动.当然它在本地也可以正常工作.

哦 – 我已经用extras文件夹中的那些替换了硬编码的日志记录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依赖项外部化 - 代码日志