仓库
本地仓库
第一次执行maven命令会被创建
在setting.xml中可以修改仓库位置
<localRepository>/Users/a565354062/environment/maven_repository</localRepository>
中央仓库
由maven社区提供,一般插件都可以从这里获取,不需要配置,需要联网
远程仓库
开发人员自己定制的仓库
简单构建一个私有仓库,可以使用aliyun:
rdc.aliyun.com,找到研发,下拉之后会有一个私有仓库,配置信息可以按照它的说明文档
仓库寻找构件流程
maven生命周期
标准生命周期分为三个,每个周期下面还有阶段
例如:一年有四个季度,每个季度下面还有月份
clean 项目清理的处理
pre-clean 清理前要做的工作
clean 清理,主要会将编译信息等清理
post-clean 清理后要做的工作
build(default) 项目部署
validate 检查项目中所有必要信息是否可用
他并不是检查代码的,而是检查pom(project object model)的
例如pom中,version属性是必须的,如果把它去掉,则会提示error
compile 编译代码
会把指定目录下的源代码编译,并把不需要的文件复制到相关目录下
test 测试
需要使用适当的测试框架例如JUnit
只要有一个测试失败,那么就build failure
package 创建在pom中所定义的包
包会放在target目录下,当然这个目录是可自定义的
verify 运行任意的检查来验证项目包有效且达到质量标准。
install 对打包的项目放到本地仓库,供其他项目使用
deploy 将项目打包到远程仓库,供其他开发者使用
需要配置文件,以下是以aliyun为例子,其他配置可以参考aliyun私有仓库文档
打开rdc.aliyun.com,找到研发--->私有仓库
<distributionManagement>
<repository>
<id>rdc-releases</id>
<url>https://repo.rdc.aliyun.com/repository/xxxx/</url>
</repository>
<snapshotRepository>
<id>rdc-snapshots</id>
<url>https://repo.rdc.aliyun.com/repository/xxx/</url>
</snapshotRepository>
</distributionManagement>
生命周期流程

生命周期是按照顺序执行的,前面的可以进行省略,例如执行mvn install,那么install前面的周期会按照顺序进行加载,当然也可一进行跳过
例如:mvn install -Dmaven.test.skip=true
sit 项目站点文档的创建
pre-site:执行一些需要在生成站点文档之前完成的工作
site:生成项目的站点文档
post-site: 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
site-deploy:将生成的站点文档部署到特定的服务器上
插件
我们输入命令项目就会进行一些操作,这写操作由插件完成,生命周期插件父级pom中已经定义,也可以引入一些其他插件,例如mybatis-generator-plugin
例如我们运行mvn compile,其实他是由maven-compiler-plugin来完成的,所以也可以写出mvn compiler:compile
插件在pom文件中<build></build>中
例如编译
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement> 定义版本等信息的管理,上面就不需要写版本了
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
</pluginManagement>
</build>
插件列表可以参考:https://maven.apache.org/plugins/index.html
常用的属性
必须属性
modelVersion 模型
groupId 组织域名+项目名称
artifavtId 项目模块
version 版本
packaging 打包类型:jar、war、ear、pom等
非必备属性
dependencies [
dependency {
scope 作用范围compile, provided, runtime, test, system,这里设计到依赖的传递
}
]
parent { 继承父级,例如版本信息,通用的jar包等
groupId
artifactId
version
relativePath
}
properties { 自定义变量通过${var}来引用
}
build {
sourceDirectory 源文件代码目录
scriptSourceDirectory 脚本源代码目录
testSourceDirectory 测试源代码目录
outputDirectory 源文件class文件输出目录
testOutputDirectory 测试源文件class输出目录
plugins [ 插件集合,例如打包,编译,mybatis-generator
]
pluginManagement [ 插件管理,例如版本等
]
}
modules [ 模块,比如支付项目,有微信支付,支付宝支付,银行卡支付,把三个子模块集成到大模块中,打包的时候可以把三个一同加载,用的时候只需要引入支付模块就可以了,而不用分别引入
module
]
dependencyManagement { 依赖管理,比如开发微服务的时候,各种包的版本比较难管理,可以直接引入管理包,那么其他依赖会自动向这个管理考齐
dependencies [
{
groupId
artifactId
}
]
}
repositories [ 拓展远程仓库,也可以是自定义的远程仓库
]
distributionManagement{项目分发信息,执行deploy 后会将项目上传到远程仓库
repository {
id
url
}
snapshotRepository {
id
url
}
}
name 项目的名称
url 项目主页的url
description 项目的描述
developers [ 项目的开发者
{
id 开发者的唯一标识
name 开发者的名称
email 开发者的邮箱
url 开发者的主页
roles [ 开发者在项目中扮演的角色
role 描述各种角色,例如:管理者,开发者
]
organization 所属组织
organizationUrl 组织url
}
]
contributors[ 其他贡献者,属性参考developer
]
依赖传递