我试图"包括"使用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本身,而不仅仅是它正在运行以访问它的应用程序。例如:
答案 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 maven插件源可能是一个很好的起点。
答案 2 :(得分:0)
为什么使用系统范围,因为如果我检查maven central就可以找到它。