如何为Tomcat提供maven依赖项

时间:2011-12-20 14:17:29

标签: tomcat maven

我试图"包括"使用Tomcat 7.0的各种Jars /库(通常我将它们放在tomcat / lib目录中)以使Tomcat JSR 109兼容。

因此,我添加了一些依赖项并使它们成为#34; system",希望Tomcat在启动时可以使用系统范围的依赖项。不幸的是,即使浏览我的依赖项列表中的包,显示了Tomcat正在寻找的所有类,但Tomcat似乎无法访问它们或知道它们的位置。

请告知......

<dependency>
    <groupId>com.sun.xml</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.0EA3</version>
    <scope>system</scope>
    <systemPath>${path.jaxwsrt}</systemPath>
</dependency>

添加注意:我喜欢Tomcat本身,而不仅仅是它正在运行以访问它的应用程序。例如:

  • Spring Tomcat Instrumentable Classloader
  • 用于Apache Commons日志记录和Web服务支持的Catalina扩展

3 个答案:

答案 0 :(得分:6)

这不是系统范围的意思。系统范围对Maven说:“这种依赖是我系统的一部分。当我发送工件时你不需要捆绑它,因为它已经存在于系统中。在编译或运行测试时你不需要下载它,因为我在这里给你通往它的道路。“ (您必须为系统范围依赖项提供路径。)

让Tomcat可以使用JAR的标准方法是将它们放入WAR中。如果将范围设置为“compile”或“runtime”,则会发生这种情况。

另一种方法是将JAR放入Tomcat的共享目录中,并将其范围设置为“提供”。如果你这样做,你就是在运行一个非标准的Tomcat发行版,你需要一个进程来管理它(否则你有一天会遇到麻烦,因为人们不理解为什么你的应用程序不会在vanilla Tomcat上运行安装)。

关于Maven范围的简短提醒:

compile =“我编译时,编译测试时,运行测试时,执行项目时需要将其捆绑在一起,并且需要将其捆绑在可交付项中,因为它不在运行时环境中”

runtime =“我的代码将在没有这个的情况下进行编译,但它会在运行时查找它,包括运行测试时,并且在运行时环境中没有提供它,所以请将它捆绑在交付项中。”

provided =“我的代码需要这个来编译,并且在运行测试和生产时,所以我需要在类路径上进行编译和测试,但是你不需要捆绑它,因为运行时环境提供它。”

答案 1 :(得分:2)

Tomcat不知道maven或其依赖项。 如果你想改变tomcat行为(而不仅仅是你的应用程序 - 即WEB-INF / lib),你需要:

  • 在注入额外的依赖项后从maven启动tomcat
  • 有一个额外的构建步骤,可以将额外的库部署到“众所周知的”tomcat安装
  • 使用额外的lib重新打包您的私有版tomcat,然后使用它来托管您的应用

在所有情况下,这都属于单独的maven模块,因为它与您的应用程序无关。如果你想做任何这些,tomcat maven插件源可能是一个很好的起点。

答案 2 :(得分:0)

为什么使用系统范围,因为如果我检查maven central就可以找到它。