项目管理工具-Maven
1 简介
- Maven本质是一个项目管理工具,将项目开发和管理过程抽象为一个项目对象模型(POM),我们只需要告诉Maven需要哪些jar包,它会帮我们下载所有的jar,提高开发效率。
- pom

- 作用
- 构建标准的、跨平台的项目
- 依赖管理,方便快捷的管理项目所依赖的jar包,避免资源间的版本冲突问题
- 提供统一的,标准的项目结构

2 下载安装
下载地址:https://maven.apache.org/download.cgi
下载所需的版本后直接解压缩,目录简介:
- bin:Maven的运行脚本。
- boot:Maven的加载器。
- conf:配置文件夹。
- lib: Maven依赖的jar包
2.1 配置环境变量:
- 依赖Java,需要配置JAVA_HOME.
- 需要配置MAVEN_HOME:Maven解压的目录。
- 编辑Path环境变量:添加%MAVEN_HOME%\bin
在cmd窗口输入mvn -v查看是否配置成功。
2.2.修改配置文件(conf文件夹下的setting.xml文件):
-
修改本地仓库位置
<localRepository>D:\Users\cc\settings\Maven\repository</localRepository> -
添加国内镜像源
添加标签下 ,添加国内镜像源,这样下载jar包速度很快。默认的中央仓库有时候甚至连接不通。一般使用阿里云镜像库即可。 点击查看代码
<mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror>
2.3 ideal下配置Maven

3 概念
3.1 仓库
- 仓库:用于存储资源,包含各种jar包
- 仓库分类:
-本地仓库:自己电脑上存储资源的仓库,可远程仓库获取资源
-远程仓库:非本机电脑上的仓库,为本地仓库提供资源
-中央仓库:Maven团队维护,存储所有资源的仓库
-私服:部门/公司范围内存储资源的仓库,从中央仓库获取资源 - 私服的作用:
-保存具有版权的资源,中央仓库的资源都是开源的
-一定范围内共享资源,仅对内部开放,不对外共享
3.2 坐标
- 什么是坐标
用于描述仓库中资源的位置
https://repo1.maven.org/maven2/ - Maven坐标主要组成
groupId:定义当前Maven项目隶属组织名称(通常是域名反写,如:org.mybatis)
artifactId:定义当前Maven项目的名称(通常是模块名称,如CRM、SMS)
version:定义当前项目版本号 - Maven坐标的作用
使用唯一标识,唯一性定位资源位置,通过该标识可以将资源的识别与下载交由机器完成
4 依赖管理
4.1 依赖传递
依赖具有传递性:
- 直接依赖:在当前项目中通过依赖配置建立的依赖关系
- 间接依赖:被依赖的资源如果依赖其它资源,当前项目间接依赖其它资源
4.2 依赖传递冲突问题
- 路径优先:当依赖中出现相同的资源时,层级越深,优先级越低,层级越浅,优先级越高
- 声明优先:当资源在相同层级被依赖时,配置顺序靠前的覆盖配置顺序靠后的
- 特殊优先:当同级配置了相同资源的不同版本,后配置的生效
4.3 可选依赖
- 可选依赖指对外隐藏当前所依赖的资源
点击查看代码
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<optional>true</optional>
</dependency>
4.4 排除依赖
-排除依赖指主动断开依赖的资源,被排除的资源无需指定版本
点击查看代码
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<exclusions>
<exclusion>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-core</artifactId>
</exclusion>
</exclusions>
</dependency>
4.5 依赖范围
可以通过scope标签设定其作用范围

5 项目管理思想
5.1 分模块开发与设计
将项目根据controler,service,dao,pojo单独拆分成独立的模块进行开发,模块打包成jar包或者war包作为依赖。
聚合
分模块后由于模块相互依赖,发布打包时候需要一个个操作,聚合可以快速构建maven工程,一次性构建多个项目/模块。
步骤:
- 创建一个空模块,打包类型定为pom
<packing>pom</packing> - 定义当前模块进行构建操作时关联的其他模块的名称
<modules>
<module>../controler</module>
<module>../service</module>
<module>../dao</module>
<module>../pojo</module>
</modules>
5.2 继承
可以通过继承实现在子模块中沿用父模块中的配置
步骤
-
子模块中声明父模块坐标
点击查看代码
<parent> <groupId>com.cc</groupId> <artifactId>cc</artifactId> <version>1.0-SNAPSHOT</version> <!-- 父模块pom --> <relativePath>../cc/pom.xml</relativePath> </parent> -
父模块中定义依赖管理
点击查看代码
<dependencyManagement> <dependencies> <dependencies> <dependencyManagement>
5.3 继承与聚合
- 作用
- 聚合用于快速构建项目
- 继承用于快速配置
- 相同点
- 聚合与继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件种
- 聚合和继承均属于设计性模块,并无实际的模块内容
- 不同点
- 聚合是在当前模块种配置关系,聚合可以感知到参与聚合的模块有哪些
- 继承是在子模块种配置关系,父模块无法感知到哪些子模块继承了自己
5.4 属性
类别
5.4.1 自定义属性
作用:等同于定义变量,方便统一维护
格式:
点击查看代码
<!--定义自定义属性 -->
<properties>
<spring.version>5.1.9.RELEASE</spring.version>
<junit.version>4.12</junit.version>
</properties>
<!--调用-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
5.4.2 内置属性
作用:使用maven内置属性,快速配置
调用格式:${version}
5.4.3 Setting属性
作用:使用maven配置文件setting.xml中的标签属性,用于动态配置
调用格式:${settings.localRepository}
5.4.4 Java系统属性
作用:读取Java系统属性
调用格式:${user.home}
系统属性查询命令:mvn help:system
5.4.5 环境变量属性
作用:读取环境变量的属性
调用格式:${settings.localRepository}
所有环境变量属性查询命令:mvn help:system
5.4.6 pom属性
${project.build.sourceDirectory} :项目的主源码目录,默认为 src/main/java
${project.build.testSourceDirectory} :项目的测试源码目录,默认为 src/test/java
${project.build.directory} :项目构建输出目录,默认为 target/
${project.outputDirectory} :项目主代码编译输出目录,默认为 target/classes
${project.testOutputDirector} :项目测试代码编译输出目录,默认为 target/test-classes/
${project.groupId} :项目的 groupId
${project.artifactId} :项目的artifactId
${project.version} :项目的 version ,与 ${version} 等价
${project.build.finalName} :项目打包输出文件的名称,默认为${project.artifactId}-${project.version}
5.5 版本管理
分类
5.5.1 SNAPSHOT(快照版本)
- 内部版本,方便团队成员合作。
- 会根据开发的进度不断更新
5.5.2 RELEASE(发布版本)
- 项目开发到阶段性时候,向外部提供的稳定版本
- 后续开发,不会改变当前发布的版本
资源配置
资源配置多文件维护

配置文件引用pom属性
作用:在任意配置文件中加载pom文件中定义的属性
格式:${jdbc.url}
开启配置文件加载pom属性
```
<build>
<resources>
<resource>
<!-- 设定配置文件对应的位置目录,支持使用属性动态设定路径-->
<directory>${project.basedir}/src/main/resources</directory>
<!-- 开启对配置文件的资源加载过滤-->
<filtering>true</filtering>
</resource>
</resources>
</build>
```
</details>
5.6 多环境开发配置
给项目配置多个环境

作用:加载指定环境配置
调用格式:mvn 指令 -P 环境定义id
5.7 私服
Nexus:maven私服产品
下载地址:https://help.sonatype.com/repomanager3/download
- 启动:
nexus.exe /run nexus - 访问服务器:
http://localhost:8081 - 修改基础配置信息
安装目录下etc下的nexus-default.properties文件 - 修改服务器运行配置信息
安装目录下bin下的nexus.vmoptions文件
5.8 ideal中资源上传下载
私服仓库分类:
- 宿主仓库hosted
- 保存无法从中央仓库获取的资源
- 自主研发
- 第三方非开源项目
- 保存无法从中央仓库获取的资源
- 代理仓库proxy
- 代理远程仓库,通过nexus访问其他公共仓库,如中央仓库
- 仓库组group
- 将若干仓库组成一个群组,简化配置
- 仓库组不能保存资源,属于设计型仓库
资源上传:
- 资源上传需提供的信息
- 保存的位置(宿主仓库)
- 资源文件
- 对应的坐标
ideal中资源发布具体配置:
-
本地仓库访问私服
-
配置本地仓库访问私服的权限(setting.xml)
点击查看代码
<servers> <server> <id>宿主仓库名称(正式版)</id> <username>admin</username> <password>admin</password> </server> <server> <id>宿主仓库名称(测试版)</id> <username>admin</username> <password>admin</password> </server> </servers> -
配置本地仓库资源来源(setting.xml)
点击查看代码
<mirrors> <mirror> <id>仓库名称</id> <mirrorOf>*</mirrorOf> <url>http://localhost:8081/repository/maven-public/</url> </mirror> </mirrors>
-
-
项目工程访问私服
-
配置当前项目访问私服上传资源的保存位置(pom.xml)
点击查看代码
<distributionManagement> <repository> <id>私服具体的仓库</id> <url>http://localhost:8081/repository/仓库1/</url> </repository> <snapshotRepository> <id>私服具体的仓库</id> <url>http://localhost:8081/repository/仓库2/</url> </snapshotRepository> </distributionManagement>
-
结束,以后再补充

浙公网安备 33010602011771号