• 依赖库dependencies 是pom文件的核心,项目中用到的依赖包都要写进去
    用到的标签有:groupId,artifactId和version(SNAPSHOT表示当前版本是一个不稳定的,尚处于开发中的版本)
  • scope标签表明了依赖的范围,几种赋值为:(目前我常用的就是<scope>test</scope>
  • compile,默认值,表示这个被依赖的maven项目会参与项目编译,测试和运行,打包的话也会将这个项目打包进去,是一个比较强的依赖范围
  • test,表示这个被依赖的maven项目仅参与测试代码的编译和运行,典型的是junit
  • runtime,表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与,与compile相比,跳过编译而已
  • provided,表示只有当JDK或者一个容器已经提供了这个依赖后才使用。例如,如果你开发了一个web应用,你可能在编译classpath的过程中需要可用的servlet API来编译一个servlet。但是你不会想要在打包好的war文件中包含这个servlet API。这个API会由你的应用服务器或者servlet容器来提供(比如tomcat)。也就是说,provided依赖在编译classpath是可用,他不是传递性的,也不会被打包
  • system,与provided类似,但是你必须显式的提供一个本地jar包的路径(systemPath)
  • build编译部分:
    finalName:项目最终编译生成的名字
    defaultGoal:执行构建时默认的goal或phase,如jar:jar或者package等
    plugins:给出构建过程中所用到的插件,常用的是maven-compiler-plugin
    resources:存放的是项目的各种资源,最常见的就是.properties文件,用来定义一些编译时用到的变量
  • properties定义了一些常量,避免一些重复的东西,比如引入spring各种依赖包时,可以统一配置其version:
<properties>
    <spring.version>5.2.4.RELEASE</spring.version>
</properties>

则spring的所有依赖包版本则可以写为:<version>${spring.version}</version>

  • spring相关依赖包:
    Spring Core:Spring的核心工具包,是其他组件的基本核心
    Spring Beans:Spring IOC的基础实现,是所有应用都要用到的,包含访问配置文件、创建和管理bean等。
    Spring Context:在基础IOC功能上提供扩展服务,此外还提供许多企业级服务的支持,有邮件服务、任务调度、JNDI定位,EJB集成、远程访问、缓存以及多种视图层框架的支持。
    Spring JDBC:对JDBC 数据访问进行封装
    Spring JMS:Java消息服务
    Spring test:对JUNIT等测试框架的简单封装
    Spring tx:为JDBC、Hibernate、JDO、JPA等提供的一致的声明式和编程式事务管理
    Spring web:包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。
    Spring webmvc:包含SpringMVC框架相关的所有类。包括框架的servlets,web MVC框架、控制器和视图支持。
    Spring webmvc portlet:Spring MVC的增强
    Spring websocket:提供 Socket通信, web端的推送功能
    Spring ibatis:对iBATIS SQL Maps的支持

    图中可以简单认为将spring分为5个部分:core、aop、data access、web、test,图中每个圆角矩形都对应相应jar包,如果在maven中配置,所有这些jar的“groupId”都是“org.springframework”,每个jar有一个不同的“artifactId”,官方给出总共20个JAR包。

参考:
pom文件解析spring相关依赖包spring framework体系结构及模块jar依赖关系