maven官网:http://maven.apache.org/download.cgi
建议Windows平台下载*.zip压缩包,而Linux平台下载.gz压缩包
- 下载完放到指定目录下解压即可,然后配置一下环境变量,在cmd里面使用mvn -v 命令查看是否安装成功即可
- 配置远程仓库镜像地址,下面推荐使用阿里的镜像仓库,在公司需要配置公司的私有仓库
2. Maven的约定nexus-aliyun * Nexus aliyun http://maven.aliyun.com/nexus/content/groups/public
Maven采用了”约定优于配置(Convention over Configuration,CoC)”的原则,根据此原则,Maven的主要约定有如下几条:
- 源代码应该位于${basedir}/src/main/java路径下
- 资源文件应该位于${basedir}/src/main/resourse路径下
- 测试代码应该位于${basedir}/src/test路径下
- 编译生成的class文件应该位于${basedir/target/classes}路径下
- 项目应该会产生一个JAR文件,并将生成的JAR包放在${basedir}/target路径下
上图就是maven的简化版生命周期,分别介绍一下:
- clean:执行清理, 就是删除 target 文件夹
- validate: 验证项目是否正确,所有必要的信息可用
- compile: 编译项目的源代码
- test : 使用合适的单元测试框架测试编译的源代码。
- package : 项目打包
- verify: 对集成测试的结果执行任何检查,以确保满足质量标准
- install : 安装到本地仓库
- deploy: 部署到远程仓库
下图显示了默认的生命周期所包含的核心阶段的执行过程:
POM需要为项目提供一个唯一标识符,
这个标识符就被称为Maven坐标,Maven坐标由4个元素组成
- groupId: 该项目的开发者的域名
- artifactId:指定项目名
- package: 指定项目打包的类型
- version: 指定项目的版本
下面我就从0新搭建一个maven父子工程来讲一些基础玩法哈
- 创建父工程
- 因为这是父工程,我就把src删掉了,没啥用,看到的就是下面这个
- modelVersion : 这个创建maven就会自动生成,指定了当前POM模型的版本,对于Maven2及Maven 3来说,它只能是4.0.0
- 其他三个是你自己创建时定义的,具体看图中注释哈
几个常用的配置:
5.1.1 配置- 定义packaging为pom,表示他是爸爸,如果存在子工程,这里必须时pom。表示子工程需要继承父工程
pom
- name 标签:开发常用的简称,推荐中文结合
${project.artifactId} | 测试父工程
- description 标签:核心功能和在整个架构中的作用,就是一些描述信息
- inceptionYear 标签: 开发年份
- url 标签: url链接
- 指定父工程:
接下来是指定父工程,比如我指定boot的版本是2.1.5
如果这段配置放在父工程里面,接下来所有的子工程都不需要配置,直接继承使用即可
5.1.3 配置 propertiesorg.springframework.boot spring-boot-starter-parent2.1.5.RELEASE
- 配置 properties :
1.8 Greenwich.RELEASE 0.9.0.RELEASE 1.16.20
定义jar包的版本库,用来统一版本号,避免冲突
注意: boot和Cloud版本是有对应关系的,搞不清访问下面这个链接,是官方提供的:
https://start.spring.io/actuator/info
- 配置 dependencyManagement声明依赖:
org.springframework.cloud spring-cloud-dependencies${spring-cloud.version} pom import org.springframework.cloud spring-cloud-alibaba-dependencies${spring-cloud-alibaba.version} pom import org.projectlombok lombok${lombok.version} provided
dependencyManagement只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。
如果不在子项目中声明依赖,是不会从父项目中继承下来的;
只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;
另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本;
通俗点说就是,dependencyManagement只是一个声明定义,子工程要用,就在子工程里面直接用,不需要指定版本号,会引用父工程的版本号,如果子工程不想用父工程里面声明的版本号,就自己指定,完事;
注意:
pom和import的作用在于解决maven的单继承问题
通俗一点的理解就是,你可以理解为把外面的parent扔到了dependencyManagement里面,比如上面的 spring-boot-starter-parent 是通过parent标签放在外面的,现在我把它丢到dependencyManagement里面,如果想达到相同的效果,就必须使用pom和import标签;位置不同,使用的标签不同而已
注意: 在父工程里面配置dependencies,会强制性的会添加到子模块当中,子模块一定会加载,所以这里我们一般不配置
如上图所示:加在那的作用就是表示一直从远程仓库获取,不走本地仓库
默认是…/pom.xml 但是如果设定为空值,不就是避开本地仓库嘛哈哈
MAVEN构建jar包时候查找顺序:
relativePath元素中的地址–本地仓库–远程仓库
基于父工程创建子工程,以上面的为案列:
wql-maven com.ooo 1.0.0-SNAPSHOT 4.0.0 wql-maven-user
默认会关联父工程,因为版本已经在父工程定好了,我们只需要引入需要的依赖即可,不需要指定版本,避免了版本冲突问题
6. scope 标签玩法jar ${project.artifactId} | 测试user子工程 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-actuatorcom.alibaba.cloud spring-cloud-starter-alibaba-seata
指定依赖库起作用的范围。
该子元素可接受compile、provided、test、system、runtime、import等值;
-
compile:默认的范围,编译、测试、打包时需要
-
provided:表示容器会在runtime时提供
-
runtime:表示编译时不需要,但测试和运行时需要,最终打包会包含进去
-
test:只用于测试阶段
-
system:与provided类似,但要求该JAR是系统中自带的
当maven依赖本地而非repository中的jar包,sytemPath指明本地jar包路径
com.oracle ojdbc712.0.1 system ${project.basedir}/src/main/resources/lib/ojdbc7.jar
- import:继承父POM文件中用dependencyManagement配置的依赖,import范围只能在dependencyManagement元素中使用(为了解决多继承)
直接在父工程里面配置mave打包插件即可,子工程不需要配置,但是子工程需要指定生成jar包的名字
- 父工程里面
wql-maven org.springframework.boot spring-boot-maven-plugin
- 子工程里面
wql-maven-admin
看自己搭配哈,用法很多种,打包的时候,可以通过父工程一键打包即可;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)