我刚刚开始将Maven用于我的一个项目。我将我的工件打包为要部署到tomcat的war文件。我已经在pom.xml文件中指定了所有依赖项(例如:jackson-databind jar)
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.7</version>
</dependency>
我可以在eclipse类路径中看到我所有的依赖罐,请确保没有编译错误或任何错误。
将代码打包到war文件中之后,我尝试检查其内容。我可以看到我的所有源文件,但是在war文件中没有跟踪我的依赖关系。
我将战争部署到了本地tomcat服务器,并且能够进行测试,没有错误。
我的问题是:tomcat是如何获得我的项目所依赖的jar的?还是tomcat读取每个war文件的pom.xml并下载所有依赖项?
答案 0 :(得分:1)
说来容易,maven会按照pom文件中的描述为您找到使您的Web应用程序正常工作所需的所有库。实际上,在旧时代(!),必须手动搜索所有需要的库并将其放在/ lib文件夹中,以使webapp正常工作。
因此,当您运行例如mvn clean install
maven会为您完成此工作:查找依赖项,从maven存储库中找到正确的jar文件,下载(如果需要),然后进行战争,将所有内容放置在正确的位置,因此将.war部署在Tomcat上的webapps文件夹(然后由tomcat本身解压缩),在webapp启动时,Java classloader不会抱怨。
很抱歉,确实简化了示例,但我希望阐明这一点。
答案 1 :(得分:0)
Tomcat服务器不负责解决Maven依赖关系,仅用于在服务器上运行应用程序。
使用 mvn clean install 构建项目时,依赖项jar将自动附加到war文件。无需担心依赖关系解析。
Tomcat将此请求映射到适当的引擎进行处理。这些引擎包含在其他元素(例如主机和服务器)中,这些元素限制了Tomcat搜索正确引擎的范围。
用户使用“生成”目标调用“原型”插件,以从标准模型为该类型的项目生成指定类型的Maven项目。
Maven执行与该目标相关的一系列步骤,检查本地存储库中是否存在构建给定原型所需的依赖项(包括Java标准JAR和Maven插件)。 Maven将这些文件组织到目录中,每个项目使用相同的布局。这种“标准目录布局”有助于确保所有Maven项目对于所有用户来说都是熟悉的,即使它们是使用不同的框架构建的。
用户使用适合其项目的配置信息来修改程序包的POM.xml配置文件。可以通过其他插件将这一过程的大部分自动化。
用户在项目上调用Maven的“阶段”,例如编译,测试或部署。 Maven自动触发所有必要的先前阶段以达到请求的阶段。阶段基于从POM继承的信息提供命令抽象。因此,与在WAR项目上调用同一命令相比,在JAR项目上调用“打包”阶段将执行不同的步骤。
希望这会有所帮助。