0、mvn [命令] 在pom.xml文件目录下执行 --------------------------
1、项目结构
2、加载依赖时会自动加载依赖的子依赖。
3、中国区用户可以使用阿里云提供的Maven镜像仓库。
4、search.maven.org查看依赖坐标信息(groupId、artifactId、version)
5、Maven通过解析依赖关系确定项目所需的jar包,常用的4种scope
有:compile
(默认),test
,runtime
和provided
;
6、使用Maven构建项目就是执行lifecycle,执行到指定的phase为止。每个phase会执行自己默认的一个或多个goal。goal是最小任务单元。
执行每个phase,都是通过某个插件(plugin)来执行的,Maven本身其实并不知道如何执行compile
,它只是负责找到对应的compiler
插件,然后执行默认的compiler:compile
这个goal来完成编译。所以,使用Maven,实际上就是配置好需要使用的插件,然后通过phase调用它们。
自定义插件往往需要一些配置,需要指定Java程序的入口。
Maven自带的标准插件例如compiler
是无需声明的,只有引入其它的插件才需要声明。
7、Maven可以有效地管理多个模块,我们只需要把每个模块当作一个独立的Maven项目,它们有各自独立的pom.xml
。
8、Maven Wrapper,它可以负责给这个特定的项目安装指定版本的Maven,而其他项目不受影响。
9、把自己的库发布到Maven的repo中
(1)上传静态文件
(2)通过Nexus发布到中央仓库
我们不能直接发布到Maven中央仓库,而是通过曲线救国的方式,发布到central.sonatype.org,它会定期自动同步到Maven的中央仓库。
没有私有Nexus服务器,还可以发布到GitHub Packages。GitHub Packages是GitHub提供的仓库服务,支持Maven、NPM、Docker等。
10、依赖冲突及其解决
(1)依赖调节原则
a. 第一声明者优先原则
按导入坐标顺序,以最先导入的为准
b. 路径近者优先原则
如,直接依赖优于间接依赖
(2)排除依赖
使用exclusions标签将传递过来的依赖排除出去。
在当前要排除的依赖的dependency标签内部添加exclusions标签,再加入exclusion子标签,字标签可以有多个。
(3)版本锁定(使用最多)
采用直接锁定版本的方式确定依赖jar包的版本,版本锁定后则不考虑依赖的声明顺序或依赖的路径,一锁定的版本为准添加到工程中,此方法在企业开发中经常使用。
方法:第一步,在dependencyManagement标签中锁定依赖的版本;第二步,在dependency标签中声明要导入的maven坐标。
注意:GitHub的Package只能作为私有仓库使用