一 概述
1.Maven是什么?
Maven是一个项目管理工具,将项目分割成多个部分来开发,通过POM实现各部分的连接与合并。
2.中央仓库
传统开发中,依赖的架包需要下载后导入项目中,不仅寻找架包麻烦,更新时,还需要重新下载,更重要的是团队开发中,容易出现架包版本一致导致冲突的问题。Maven提供了一个网络仓库,仓库包含开发中用到的几乎全部架包,做简单的配置,就可以从仓库中获取架包,这个仓库叫做重要仓库,网址https://repo.maven.apache.org/maven2/。
3.本地仓库
本地仓库是本地一个保存从中央仓库获取的架包以及自建架包的地方,默认在本机C盘用户信息文件夹内。重装系统会导致C盘文件丢失,因此一般不将本地仓库放在C盘。
在Maven安装目录config文件夹内找到settings.xml文件,在<settings>标签内自定义本地仓库位置:
<localRepository>D:/Program Files/JAVA/Maven/repository</localRepository>
4.maven坐标系
<groupId>com.maven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version>
maven坐标系是确定一个项目或者组件的信息,通常由三部分构成:
- <groupId>:组件所属项目,为了避免重复,项目名称通常采用包名形式。
- <artifactId>:项目下的一个组件。
- <version>:版本号。
二 配置
Maven需要在操作系统环境变量中配置,配置两个信息:一个可执行文件访问路径,一个Maven安装路径MAVEN_HOME。
三 常用操作
- mvn compile:编译,即由源码文件.java生成字节码文件.class,在项目目录下建立一个target文件存放编译生成的文件。
- mvn clean:清空编译结果,即删除target文件。
- mvn test:测试,测试类的类名为被测试类类名后加Test。
- mvn package:打包。
- mvn install:将项目发布到本地仓库。
四 src/main/resources文件夹
配置文件如xml、properties文件,需要放到src/main/resources文件夹内,相当于放到类路径下,如果该目录不存在,手工创建。
五 引用
如果一个组件需要引用另一个组件,在本组件中的pom.xml文件中添加被引用组件的maven坐标:
<dependencies> <dependency> <groupId>com.maven.user</groupId> <artifactId>user-dao</artifactId> <version>0.0.1-SNAPSHOT</version> </dependency> </dependencies>
六 聚合与继承
将多个组件集中起来管理称作聚合。选择创建简单项目,新建一个集中管理组件,通过如下方式添加管理对象:
<modules> <module>../user-dao</module> <module>../user-service</module> </modules>
每个组件都有自己的架包,如果架包由组件各自管理,容易出现冲突,因此可以将架包集中到一个组件中,其他组件继承该组件获取架包即可。
集中架包:
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring-version}</version> </dependency> </dependencies> <dependencyManagement>
在父组件中,可以统一管理版本,maven坐标中通过${标签名}的方式引用:
<properties> <spring-version>4.3.8.RELEASE</spring-version> </properties>
子组件继承父组件:
<parent> <groupId>com.maven.user</groupId> <artifactId>user-parent</artifactId> <version>0.0.1-SNAPSHOT</version> <relativePath>../user-parent/pom.xml</relativePath> </parent>
子类继承父类,子类并未获取父类的架包,子类需要添加自身依赖的架包。由于父组件统一管理了版本,因此子组件在引用架包时不需要再指明版本:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> </dependency>
七 依赖范围
1.什么是依赖范围?
依赖范围就是组件依赖架包的生命范围。
2.一个架包并不是在组件的整个生命周期都被依赖,有些只在某个阶段被依赖,常见的依赖范围:
- compile:默认值,在编译、测试、运行期依赖。
- test:只在测试阶段依赖,测试完毕不再需要该架包,如JUnit。
- provided:只在编译、测试期依赖,运行时不需要。
3.依赖范围的意义
准确地为架包设定依赖范围,不仅可以减小依赖体积,而且可以避免冲突。有些架包与运行环境冲突,必须设定为provided。