2011-12-20 36 views
1

我试图用Tomcat 7.0“包含”各种Jars/libraries(通常我会把它们放在tomcat/lib目录中)以使Tomcat JSR 109兼容。我如何使Tomcat的maven依赖项可用

因此,我添加了一些依赖关系,并将它们设置为“系统”,希望启动时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本身,而不是它的运行来访问它的应用程序。例子有:

  • 春Tomcat的类加载器Instrumentable
  • 为Apache共享日志记录和Web服务支持
+0

这个例子''是从哪里来的?不知道我理解这个问题。如果您已将jar添加到Tomcat的服务器库中,那么构建WAR的Maven可以使用'provided'作为依赖范围来使用这些jar。不需要''。 – 2011-12-20 14:28:16

+0

我想他希望Tomcat从Maven那里获得罐子,本质上。 – AHungerArtist 2011-12-20 14:33:57

+0

是的,我希望Tomcat(在启动时)能够访问我的Maven依赖项。 – Spider 2011-12-20 14:52:50

回答

0

卡塔利娜扩展你为什么要使用系统的范围,因为如果我检查maven central可以发现。

+0

我想与“系统”分享罐子。也许我错误地使用了它,但是我试图让这些罐子“可用”给Tomcat。 – Spider 2011-12-20 15:08:12

+0

如果你喜欢在Tomcat中添加依赖项,并重新创建将包含依赖关系的战争...... – khmarbaise 2011-12-20 15:50:42

+0

将你的项目置于战争中意味着什么?将实际的JAR放在WEB-INF/libs中? – Spider 2011-12-20 17:05:40

6

这不是系统范围的含义。系统范围对Maven说:“这个依赖关系是我系统的一部分,当我交付一个工件时,你不需要捆绑它,因为它已经在系统中了,编译或运行测试时不需要下载它,因为我只是在这里给你路径。“ (您必须提供路径,以获取系统范围相关性。)

使Tomcat可用的JAR的标准方式是将它们放入WAR中。如果将范围设置为“编译”或“运行时”,则会发生这种情况。

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

短提醒Maven的范围:

编译=“我需要这个当我编译,当我编译测试,当我运行测试,当我执行该项目,则需要将其捆绑在交付因为它不在运行时环境中“。

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

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

2

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

  • 启动Tomcat注入的额外的依赖后
  • 有一个额外的构建步骤,部署额外的库到一个“众所周知”的tomcat安装
  • 重新包装你的tomcat的专用版本有额外的库,然后用它来承载您的应用程序

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

+0

选项2“有一个额外的构建步骤,将额外的库部署到'众所周知'的tomcat安装中”看起来像是这种情况下最简单的选项......任何进一步的想法? – Spider 2012-01-05 19:30:25

+0

这绝对是最简单的方法 - 问题在于你的版本现在依赖于一些本地设置/属性,如果你需要在大量机器上构建,这会使生活稍微困难一些。 – ptyx 2012-01-05 20:55:33