Maven详解

> # 第一章 Maven详解
1.1.1 初识Maven
Maven是一个跨平台的项目管理工具,是Apache组织的一个颇为成功的开源项目。Maven主要服务于基于Java的项目的构建、项目信息管理和依赖管理。
Maven的英语含义是"专家、内行"
1.1.2 Maven的作用
Maven最大作用是构建项目。
Maven 可以为项目的构建过程提供很大的便利。
1. Maven可以创建项目。 (Maven项目具有统一的项目结构)
2. Maven可以引入依赖的Jar包 (核心的概念——仓库)
Maven仓库 分为 本地仓库 和远程仓库。 远程仓库又分为中央仓库 私服 和其他公共库
1. 本地仓库:开发人员计算机上的Maven仓库。 (基于坐标使用本地仓库的依赖文件,默认情况下,每个用户在自己的用户目录下都有一个仓库目录。也是默认优先级最高的)
2. 远程仓库: 网络上的仓库
如果不执行Maven命令。本地仓库的目录是不存在的。用户输入一条Maven命令时,Maven才会创建本地仓库,然后根据配置和需要从远程下载依赖的构件到本地仓库。
3. 中央仓库: Maven官方提供的仓库大全。
最原始的本地仓库是空的。Maven必须知道至少一个可用的远程仓库,才能在执行Maven命令时下载到需要的依赖也就是Jar包。中央仓库时默认的远程仓库。但也是优先级最靠后的。 Maven的安装文件默认带了中央仓库的配置。
4. 私服:局域网中搭建的Maven仓库 (特殊)
它是架设在局域网内的仓库服务。私服代理广域网上的远程仓库。Maven需要下载构建时先从私服请求,再从外部的远程仓库下载,然后缓存在私服上。
5. 其他公共库:将收集的依构建而成的仓库。比如阿里巴巴的公共库
### Maven 查找依赖的顺序 简单的来说,先本地 后 私服 和其他 最后中央下面有详解
仓库可以管理Maven项目所需的Jar包(在Maven中称为依赖)。只需简单的Maven操作就可以实现Jar包的引入。
3. Maven 可以发布管理项目
> ## 1.3 Maven的常用操作
第一步。创建一个Empty Project 空项目
第二步。创建Maven Module
1. 点击 Create New Project 进行项目创建
                                                                                                       |

|
| 2. 选择 Maven |
| 3. SDK 选择 1.7 以上版本 |
| 4. 勾选 Create from archetype,使用 Maven 模板进行项目创建 |
| 5. 选择 maven-archetype-webapp 模板 |
| 6. 点击 Next 进入下一步 |
|

| 7. 填写项目的 GroupId |
| 8. 填写项目的 ArtifactId |
| 9. 点击 Next 进入下一步 |
|

|
| 10. 选择本地 Maven 环境 |
| 11. 点击 Next 进入下一步 |
|

                                                                                        |

| 12. 填写项目名称,尽量与 ArtifactId 保持一致 |
| 13. 点击 Next 进入下一步 |
|

                                                                                         |

| 14. 如果是首次使用 Maven,需要远程下载 JAR 文件,并且需要构建项目,所以,此步非常耗时,请耐性等待 |
|

                                                                                     |

| 15. 当出现以下界面时,则表示项目构建成功 |
| |
|

                                                                                                                           |

| 第10的配置的内容有4项。 |
| |
| (1).Maven home directory:Maven 安装的路径。 |
| |
| (2).User settings file:Maven的setttings.xml的位置。是核心配置文件,位于安装路径中的conf文件夹下。可以配置 |
| |
| 1. 本地仓库地址的配置。 |
| |
| ,默认情况下是注释的,放开注释标签中配置的就是Maven本地仓库的地址。 |
| |
| 2. 公共仓库的配置。 |
| |
| 找到mirrors,默认也是注释。默认从中央仓库中下载。 推荐采用阿里巴巴的公共仓库。在mirrors中添加一些代码。 |
| |
| (3).Local repository:Maven 本地仓库的路径。 |
| |
| (4).Properties :Maven项目的属性 |
| |
| 推荐添加一条配置archetypeCatalog=internal |
| |
| 1.3.2 Pom文件详解 |
| |
| :项目的全球唯一标识符。 |
| |
| :本项目的唯一ID。项目名称 |
| |
| :项目的版本号。SNAPSHOT表示现在的是快照版本。RELEASE为最终发布版本。 |
| |
| :表示父依赖。当前项目可以继承父依赖中配置的依赖和属性。指定父依赖时需要指定父依赖的groupId version 等 |
| |
| : 项目的打包方式,一般为jar或者war。 |
| |
| :项目的名称 |
| |
| :项目主页的URL |
| |
| :定义此项目的依赖关系集 |
| |
| :定义引入的某个依赖。 |
| |
| :定义一些常量。可以在pom文件的其他地方引用。 |
| |
| :描述如何编译和打包项目。 |
| |
| 具体的编译和打包工作是通过build标签中的plugin完成的。默认情况下 Maven会绑定插件来完成基础操作。 |
| |
| | plugin名称 | 作用 | 对应IDEA操作 | |
| | :--------------------------------: | ---------------------------- | ------------ | |
| | maven-clean-plugin | 清理上一次执行创建的目标文件 | clean | |
| | maven-resources-plugin | 处理源资源和测试资源文件 | compile | |
| | maven-compiler-plugin | 编译源文件和测试源文件 | compile | |
| | maven-surefire-plugin | 执行测试文件 | test | |
| | maven-war-plugin或maven-jar-plugin | 创建war或jar文件 | package | |
| | maven-install-plugin | 将war文件打包放入本地仓库 | install | |
| | maven-deploy-plugin | 发布jar文件到指定的仓库 | deploy | |
| |
|

                                                                               |

| |
| Maven操作有9个。 |
| |
| 1. clean:清除 |
| 2. validate:验证工程是否正确 |
| 3. compile:编译项目 |
| 4. test:执行项目中的测试用例。 |
| 5. package:打包 |
| 6. verify:运行任何检查 |
| 7. install:将项目打包进本地仓库。 |
| 8. site:生成项目的网页形式的文档。 |
| 9. deploy:将项目发布到远程仓库。 |
| |
| > ## 1.3.4 热部署 |
| |
| 修改了代码后不需要重启项目就可以看到功能效果的一种部署方式。默认不开启。 |
| |
| 如何开启热部署? |
| |
| 1.FIle -->settings--> 找到 Build,Exception,Deployment -->Complier -->把 Build project automatically 对勾 勾上 |
| |
| 2.ctrl+shift +alt+/ |
| |
| > ## 1.4 Maven实战 |
| |
| ### 1.4.1 初识Nexus私服 |
| |
| 优点: |
| |
| 1. 私服仓库是局域网内的,文件下载速度快 |
| 2. 可自行进行构件的管理和维护,包括第三方构件以及项目模块中所依赖的自主开发的公共构件。 |
| 3. 提高了工作效率。 |
| |
| Nexus是一个强大的仓库管理工具,极大的简化了内部仓库的维护和外部仓库的访问。 |
| |
| Nexus提供俩种安装包: |
| |
| 1. 内嵌Jetty容器的bundle包(只需要有JRE就可以直接运行) |
| 2. war包(须将其发布到Web容器中才能使用) 安装详见教材 |
| |
| 1.4.4 Nexus仓库及常规操作 |
| |
| 1.Nexus仓库 |
| |
| Nexus的Repositories中默认有7个仓库。包含第三方依赖库、中央仓库、发布版本以及快照版本等等。 |
| |
| Nexus的预定义仓库的类型(Type)、策略(Policy)、格式(Format)各有不同。 |
| |
| 1).仓库类型有4种。 |
| |
| 1).Hosted Repository本地仓库。内部项目的发布集。 |
| |
| 2).Proxy Repository代理仓库。被用来代理远程的公共仓库。 |
| |
| 3).Virtual Repository 虚拟仓库 |
| |
| 4). Repository Group 仓库组 |
| |
| 2).仓库策略 |
| |
| 1. Release 发布版本 |
| 2. Snapshot 快照版本 |
| |
| |
| |
| # Maven 查找依赖的顺序 |
| |
| maven项目使用的仓库一共有如下几种方式: |
| |
| 1. 中央仓库,这是默认的仓库 |
| 2. 镜像仓库,通过 sttings.xml 中的 settings.mirrors.mirror 配置 |
| 3. 全局profile仓库,通过 settings.xml 中的 settings.repositories.repository 配置 |
| 4. 项目仓库,通过 pom.xml 中的 project.repositories.repository 配置 |
| 5. 项目profile仓库,通过 pom.xml 中的 project.profiles.profile.repositories.repository 配置 |
| 6. 本地仓库 |
| |
| |
| |
| - 只要 ~/.m2/repository 中包含依赖,无论怎么配置,都会优先使用local本地仓库中的jar. |
| |
| ### 最终结论 |
| |
| - settings_mirror 的优先级高于 central |
| - settings_profile_repo 优先级高于 settings_mirror |
| - settings_profile_repo 优先级高于 pom_repositories |
| - settings_profile_repo 优先级高于 pom_profile_repo |
| - pom_profile_repo 优先级高于 pom_repositories |
| - pom_repositories 优先级高于 settings_mirror |
| |
| 通过上面的比较得出完整的搜索链: |
| |
| local_repo > settings_profile_repo > pom_profile_repo > pom_repositories > settings_mirror > central |
| |
| 本地仓库> 全局profile仓库 项目profile仓库 pom中的仓库 镜像仓库 中央仓库 |
| |
| img |
| |
| > ### MAVEN依赖的优先原则 |
| |
| maven依赖的优先原则 |
| |
| 1.依赖最短路径优先原则 |
| |
| 一个项目Demo依赖了两个jar包,其中A-B-C-X(1.0) , A-D-X(2.0)。由于X(2.0)路径最短,所以项目使用的是X(2.0)。 |
| |
| 2.pom文件中申明顺序优先 |
| |
| 如果A-B-X(1.0) ,A-C-X(2.0) 这样的路径长度一样怎么办呢?这样的情况下,maven会根据pom文件声明的顺序加载,如果先声明了B,后声明了C,那就最后的依赖就会是X(1.0)。 |
| |
| 3. 覆盖优先原则 |
| |
| 子pom内声明的优先于父pom中的依赖。 |

posted @ 2021-03-17 09:48  编码小高  阅读(199)  评论(0编辑  收藏  举报