【Java学习】Maven原理

一、Maven能做什么

https://www.limuke.top/archives/local-jar-mave

 1、假设我们有10个项目,都需要引入spring core模块,那么需要十份重复的Spring Core.jar和commons-logging.jar

   使用Maven:maven使用本地仓库存储的jar,所有项目都会公用仓库中的同一分jar

 2、Spring Core.jar必须同时引入版本兼容的commons-log.jar,否则会报错

   使用Maven:maven不需要关心这些问题,会自动引入Spring core.jar所需的兼容版本jar

3、如果一个项目里面有个100个jar,不知道那些jar是彼此关联的,那些是互相排斥的,当需要升级版本时,增加或删除一些jar,很容易出各种问题

   使用Maven:maven升级jar,只需要把版本3.x改成4.x,他会自动解决那些问题

 概括的说:Maven是一个项目管理和综合工具。Maven简化和标准化项目建设过程。处理编译,分配,文档,团队协作和其他任务的无缝连接。Maven增加可重复性并负责建立相关的业务。

二、Maven的安装和设置

1、安装之前,首先确定你已经安装了JDK

2、下载地址:http://maven.apache.org/download.cgi

3、将安装文件解压到你指定的目录中

4、配置环境变量,变量名M2_HOME,变量值为Maven的安装目录,修改path值,在变量值后面加上bin,例如:%M2_HOME%/bin

5、测试maven环境,执行命令:mvn -v 

三、从Maven模板创建一个项目

 1、整个项目的项目目录结构会自动创建

 2、所有的源代码放在文件夹/src/main/java/,所有的单元测试代码放入:/src/test/java/

 3、附加的一个标准的pom.xml被生成,这个Pom文件类似于Ant build.xml文件,它描述了整个项目的信息,一切“从目录结构”,项目的插件,项目依赖,如何构建这个项目等。

 4、Maven各个目录的解释说明

5、pom的基本信息

 6、pom的依赖关系

 

7、pom详解

  a、添加插件

 b、去除依赖

 c、继承

 d、聚合(通过一个大的项目来整合各个小的模块)

 e、指定在Build时需要的资源文件(resource)

 四、Maven的生命周期

1、clear:移除上一次构建生成的文件

2、compile:编辑项目的源代码

3、test:使用单元测试框架进行测试,测试代码不会被打包或者部署

4、package:接受编译好的代码,打包成可发布的格式

5、install:将包安装到maven本地仓库,供本地其他maven项目使用

6、deploy:将最终的包发布到远程仓库,供其他开发人员和maven项目使用。

7、site:生成项目的站点文档

五、Maven仓库

 在Maven中,任何一个依赖、插件或者项目构建的输出,都可以称之为构建。

Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库。

 任何一个构件都有其唯一坐标,根据这个坐标可以定义其在仓库中的唯一路径,这就是Maven仓库的布局方式。

如:groupId=org.testing

       artfactId=testing

       version=5.8

  生成路径:org/testing/testing/5.8/testing-5.8-jdk15.jar

六、Maven的依赖

 1、依赖的传递性

  一个复杂的项目会包含很多依赖,也有可能包含依赖其他构件的依赖。这个是Maven的强大特征之一,它支持了传递性依赖。

  依赖原则:路径优先原则,第一声明原则。

 解决依赖问题:

通过调整dependency的顺序来解决:那个依赖的顺讯在前面就依赖那个

自己添加一个denpendeny来解决:因为该路径是最小的

通过exclusions元素排除不想要的传递性依赖。

2、Version解释

 snapshot版本表示不稳定,处于开发中的版本,即快照版本

 release:表示趋于稳定,当前停止更新,可以用于发行的斑斑。

场景:协同开发时,如果A依赖B,由于B频繁更新,B应该使用SNAPSHOT来标识自己。

3、依赖范围Scope

compile(默认):编译范围的依赖,它在编译和打包的时候都会把该依赖打包进去

test:测试依赖范围,它在编译和打包的时候不会把该依赖打包进去

provided:在编译和测试范围有效,最后生成war包时不会打包进去

rumtime:运行时依赖,编译的时候不依赖

import:导入依赖范围

system:系统依赖范围

转载:https://www.cnblogs.com/chhyan-dream/p/12037568.html

原文地址:https://www.cnblogs.com/gtea/p/13656772.html