我有一个具有很多依赖项的Spring应用程序(18 MB的JAR文件。)-现在,当我在远程Tomcat 6.0服务器上进行测试时,我不想上载19 MB的依赖项,并且只需上传 class 。很简单,对吧?

我该死的东西无法工作。

我正在使用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侦听器非常快,它在其类路径中找不到。侦听器所在的spring lib是common / lib。

另外-当我部署18兆字节的完整战争时,它工作正常。一切初始化,应用启动。当然,它在本地也可以正常工作。

哦-我已经用extras文件夹中的那些替换了硬编码的日志记录JAR,以使Log4j能够正常工作。

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

最佳答案

“我有一个具有很多依赖项的Spring应用程序(18 MB的JAR文件。)-现在,当我在远程Tomcat 6.0服务器上进行测试时,我不想上载19 MB的依赖项,然后上传 class 。非常简单,对吧?

我不明白这一点-19MB并不多。打包打包WAR并完成它会更好。

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

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

如果您必须从devl-> test-> prod迁移,则另一个问题是,现在每个环境都必须部署相同的JAR,以使您的应用程序正常运行。小姐一个,你坏了。您的应用程序依赖于这些依赖项是否可用。如果它们不在服务器上,那么您很不走运。将控制权掌握在自己手中,并将JAR打包在WAR文件中。

10-07 19:23
查看更多