maven

1.为什么需要maven

  • 解决jar包之间的冲突
  • jar包之间的依赖关系
  • 获取第三方jar包更方便
  • 将项目拆分为多个工程模板
  • 实现项目的分布式部署

2.自动化构建工具

 清理编译测试报告打包安装部署

3.maven的核心概念

  • POM(项目对象模型)

  • 约定的目录结构

  • 坐标(groupId、artifactId、version)

  • 依赖管理(dependency标签)

  • 仓库管理

  • 生命周期

4.修改本地仓库地址

 打开apache-maven-3.6.3/conf下的setting.xml,修改localRepositosy标签设置本地仓库地址

5.约定的目录结构

  

6.坐标

 groupId:公司或组织域名的倒序+当前项目名称

 artifactId:当前项目的模块名称

 version:版本

7.如何通过坐标到仓库中寻找jar包

  • 将gav向量拼接起来,groupId/artifactId/version/artifactId-version.jar

  • 以连起来的字符串作为目录结构到仓库中去查找

8.仓库

  • 本地仓库
  • 远程仓库(局域网内的私服、中央仓库、中央仓库的镜像)

9.仓库中的文件

  • maven中的插件

  • 自己开发的项目模块

  • 第三方的jar包

10.生命周期

  • clean生命周期  pre-clean→clean→post-clean
  • site生命周期  pre-site→site→post-site→site-deploy
  • default生命周期  complie→test-compile→test→package→install

11.手动创建的maven工程导入到eclipse中

  右键→Import→Maven→Existing Maven project

12.jar包依赖的范围

  • compile

    main和test目录下的代码都可以访问,会部署到服务器运行时要放在WEB-INF的lib目录下

  • test

    仅test目录下的代码可以访问,不会部署到服务器运行时要放在WEB-INF的lib目录下

    例如:对junit的依赖,仅仅是测试程序需要

  • provided

    main和test目录下的代码都可以访问,不会部署到服务器运行时要放在WEB-INF的lib目录下

    例如:servlet-api在服务器上运行时,servlet容器会提供相应的api,所以部署的时候不需要

13.依赖的传递性

  Q:当存在间接依赖时,主工程对间接依赖的jar包可以访问吗?

  A:只有间接依赖的jar包范围为compile,才可以访问

14.依赖原则

  • 路径最短者优先

    A依赖于B,B依赖于C,B与C依赖的jar包版本不同,这时A所依赖的jar包版本取决于B。

  • 路径相同时先声明者有限

    A依赖于B,A又依赖于C,B与C依赖的jar包版本不同,这时A所依赖的jar包版本取决于在依赖时B与C中先声明者。

15.exclusions可以排除间接依赖

16.继承

  如果需要统一多个模块的jar包版本,则需创建父工程,在父工程中配置jar包的版本,在子工程中引用父工程。创建父工程时打包方式为pom,子工程的打包方式为jar。若子工程的gav与父工程一样,则可以删除。

  父工程中的pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>

    <!-- 通过继承管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.0</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

  子工程中的pom.xml文件

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <!-- 设置父工程 -->
    <parent>
        <groupId>com.atguigu.maven</groupId>
        <artifactId>parent</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <!-- 从当前工程出发查询父工程中pom.xml文件的 相对路径 -->
        <relativePath>../parent/pom.xml</relativePath>
    </parent>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
    <artifactId>son</artifactId>
</project>

17.聚合

  将多个工程拆分成模块后,需要手动逐个安装到仓库才能够生效,修改源代码后也需要逐个手动进行clean,而使用聚合可以批量进行maven工程的安装

<modules>
    <module>../Hello</module>
    <module>../HelloFriend</module>
    <module>../OurFriend</module>
</modules>
原文地址:https://www.cnblogs.com/yanchaoyi/p/13849427.html