约定配置

Maven 提倡使用一个共同的标准目录结构,Maven 使用约定优于配置的原则,大家尽可能的遵守这样 的目录结构,如下所示:
Maven笔记 - 图1

pom文件

当我们在项目中需要用到maven帮我们解决jar包依赖问题,帮我们解决项目中的编译、测试、打包、 部署时,项目中必须要有pom.xml文件,这些都是依靠pom的配置来完成的。POM( Project Object Model,项目对象模型 ) 是 Maven 工程的基本工作单元,是一个XML文件,包含 了项目的基本信息,用于描述项目如何构件,声明项目依赖,等等。执行任务或目标时,Maven 会在当前目录中查找 POM。它读取 POM,获取所需的配置信息,然后执 行目标。POM 中可以指定以下配置:项目依赖 插件 执行目标 项目构件 profile 项目版本 项目开发者列表 相关邮件列表信息 在创建 POM 之前,我们首先需要描述项目组 (groupId),项目的唯一ID。pom的内容比较多,我们慢慢讲,大家慢慢吸收,利于消化。

maven坐标

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
  5. http://maven.apache.org/xsd/maven-4.0.0.xsd">
  6. <!-- 模型版本 -->
  7. <modelVersion>4.0.0</modelVersion>
  8. <!-- 定义当前构件所属的组,通常与域名反向一一对应 -->
  9. <groupId>com.javacode2018</groupId>
  10. <!--项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的-->
  11. <artifactId>maven-chat02</artifactId>
  12. <!-- 版本号 -->
  13. <version>1.0-SNAPSHOT</version>
  14. </project>

maven坐标 maven中引入了坐标的概念,每个构件都有唯一的坐标,我们使用maven创建一个项目需要标注其坐 标信息,而项目中用到其他的一些构件,也需要知道这些构件的坐标信息。maven中构件坐标是通过一些元素定义的,他们是groupId、artifactId、version、packaging、classifier,它的pom中坐标信息如下:

  1. <groupId>org.zhu.shop</groupId>
  2. <artifactId>zhudongdongshop</artifactId>
  3. <version>1.0-SNAPSHOT</version>
  4. <packaging>jar</packaging>
  5. goupId:定义当前构件所属的组,通常与域名反向一一对应。
  6. artifactId:项目组中构件的编号。
  7. version:当前构件的版本号,每个构件可能会发布多个版本,通过版本号来区分不同版本的构
  8. 件。
  9. package:定义该构件的打包方式,比如我们需要把项目打成jar包,采用 java -jar 去运行这个
  10. jar包,那这个值为jar;若当前是一个web项目,需要打成war包部署到tomcat中,那这个值就是
  11. war,可选(jar、war、ear、pom、maven-plugin),比较常用的是jar、war、pom,这些后
  12. 面会详解。

maven导入依赖的构件 maven可以帮我们引入需要依赖的构件(jar等),而maven是如何定位到某个构件的呢?项目中如果需要使用第三方的jar,我们需要知道其坐标信息,然后将这些信息放入pom.xml文件中的 dependencies 元素中:

  1. <groupId>com.javacode2018</groupId>
  2. <artifactId>springboot-chat01</artifactId>
  3. <version>0.0.1-SNAPSHOT</version>
  4. <packaging>jar</packaging>
  5. <project>
  6. <dependencies>
  7. <!-- 在这里添加你的依赖 -->
  8. <dependency>
  9. <groupId></groupId>
  10. <artifactId></artifactId>
  11. <version></version>
  12. <type></type>
  13. <scope></scope>
  14. <optional></optional>
  15. <exclusions>
  16. <exclusion></exclusion>
  17. <exclusion></exclusion>
  18. </exclusions>
  19. </dependency>
  20. </dependencies>
  21. </project>

排除依赖

上面A->B的1.0版本,B->C的1.0版本,而scope都是默认的compile,根据前面讲的依赖传递性,C会传
递给A,会被A自动依赖,但是C此时有个更新的版本2.0,A想使用2.0的版本,此时A的pom.xml中可以
这么写:

  1. <dependency>
  2. <groupId>com.javacode2018</groupId>
  3. <artifactId>B</artifactId>
  4. <version>1.0</version>
  5. <exclusions>
  6. <exclusion>
  7. <groupId>com.javacode2018</groupId>
  8. <artifactId>C</artifactId>
  9. </exclusion>
  10. </exclusions>
  11. </dependency>

上面使用使用exclusions(一死可肉人)元素排除了B->C依赖的传递,也就是B->C不会被传递到A中。
exclusions中可以有多个 exclusion 元素,可以排除一个或者多个依赖的传递,声明exclusion时只需
要写上groupId、artifactId就可以了,version可以省略。