我正在与Maven和Tomcat合作。我必须部署的一些Web应用程序使用许多依赖项,这些依赖项标记为"提供"在Maven。这些依赖项的一个示例是 spring-context 。
因此,当我打包项目时,这些依赖项不包含在WAR文件的lib文件夹中。 因此,我得到了
NoClassDefFoundError: org/springframework/context/ApplicationContext
我无法更改依赖项的范围,如果可能,我不想将依赖项JAR包含在WAR文件中。
如何将Maven存储库作为类路径添加到Tomcat,以便它可以解析所有"提供的"依赖呢?无需将JAR复制到Tomcat的lib文件夹。
我在 catalina.properties 中尝试了 shared.loader 属性,但它没有递归地工作:我必须将每个JAR路径添加到属性&# 39; s值。
答案 0 :(得分:3)
当应用服务器或容器已经拥有它时,依赖关系被标记为提供,并且您不必将其置于战争中。这种情况即servlet jar,但不适用于spring-context。我认为更好的解决方案是将这种依赖关系标记为“编译”而不是“提供”。
答案 1 :(得分:0)
这里你的选择很少。就像@Andres所说,你要么在WAR中添加JAR,要么将它们添加到Tomcat的类路径中(即lib文件夹)。
虽然拥有 Maven-aware 类加载器的概念很有趣,但想象一下可能发生的所有可能的jar版本冲突。 战争A 对 Lib v1.0.1 和战争B 提供依赖 Lib v2.1.0 ,Tomcat默默地解决这些......