Maven学习笔记

Maven知识已经有点生疏了。故看了一下传智的视频,并且自己实践操作,顺便总结一下Maven相关的笔记

Maven笔记

1.Maven是什么?

Maven是一个自动化构建工具,专注于服务于java平台的项目构建和依赖管理。

2.常见项目构建工具:

Maven、Gradle、Ant

3.Maven配置

配置(settings.xml):用来管理Maven仓库相关信息

4.Maven项目的目录结构

Maven项目结构

5.POM

pom(project object model)中最主要的一个概念是坐标
坐标由三个元素构成,通过三个元素定位一个jar包

groupId:定义当前Maven组织名称
artifactId:定义实际项目名称
version:定义当前项目的当前版本
就近原则

6.Maven的依赖管理

6.1依赖范围

1.compile: 默认编译依赖范围。对于编译,测试,运行三种classpath都有效
2.test:测试依赖范围。只对于测试classpath有效
3.provided:已提供依赖范围。对于编译,测试的classpath都有效,但对于运行无效。因为由容器已经提供,例如servlet-api
4.runtime:运行时提供。例如:jdbc驱动

6.2依赖传递

B工程依赖A工程,C工程依赖B工程,那么B工程是C工程的直接依赖,A工程是C工程的间接依赖

6.3依赖范围传递
  • 当第二依赖的范围是compile的时候,传递性依赖的范围与第一直接依赖的范围一致。
  • 当第二直接依赖的范围是test的时候,依赖不会得以传递。
  • 当第二依赖的范围是provided的时候,只传递第一直接依赖范围也为provided的依赖,且传递性依赖的范围同样为 provided;
  • 当第二直接依赖的范围是runtime的时候,传递性依赖的范围与第一直接依赖的范围一致,但compile例外,此时传递的依赖范围为runtime;
6.4依赖的冲突

在Maven中存在两种冲突方式:跨POM文件的冲突,同一个POM文件的冲突。
采取的措施是:就近原则

  • A项目pom依赖Junit4.12版本,那么B项目和C项目默认也是Junit4.12版本
  • 如果B项目依赖4.11版本,那么B项目和C项目都是使用Jnnit4.11版本
  • A项目中同时存在依赖4.12版本和4.11版本,则采用代码在文件底部的的版本号。
6.5可选依赖

Optional标签标示该依赖是否可选,默认是false。可以理解为,如果为true,则表示该依赖不会传递下去,如果为false,则会传递下去。
可选依赖

6.6排除依赖

Exclusions标签可以排除依赖(较为常用)

7.Maven的生命周期

Maven有三个生命周期:clean生命周期、default生命周期、site生命周期。
生命周期可以理解为项目构建的步骤的集合。

7.1Clean
  • pre-clean 执行一些需要在clean之前完成的工作
  • clean 移除所有上一次构建生成的文件
  • post-clean 执行一些需要在clean之后立刻完成的工作
7.2Default
  • validate
  • generate-sources
  • process-sources
  • generate-resources
  • process-resources 复制并处理资源文件,至目标目录,准备打包。
  • compile 编译项目的源代码。
  • process-classes
  • generate-test-sources
  • process-test-sources
  • generate-test-resources
  • process-test-resources 复制并处理资源文件,至目标测试目录。
  • test-compile 编译测试源代码。
  • process-test-classes
  • test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
  • prepare-package
  • package 接受编译好的代码,打包成可发布的格式,如 JAR 。
  • pre-integration-test
  • integration-test
  • post-integration-test
  • verify
  • install 将包安装至本地仓库,以让其它项目依赖。
  • deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享。
7.3Site生命周期
  • pre-site 执行一些需要在生成站点文档之前完成的工作
  • site 生成项目的站点文档
  • post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
  • site-deploy 将生成的站点文档部署到特定的服务器上

8.插件

插件(plugin),每个插件都能实现一个阶段的功能。Maven的核心是生命周期,但是生命周期相当于主要指定了maven命令执行的流程顺序,而没有真正实现流程的功能,功能是由插件来实现的

会有默认插件,如果想要使用其他的插件,可以指定。
可选插件

8.1使用tomcat插件来运行web工程

默认输入tomcat:run去使用tomcat插件来启动web工程,但是默认的tomcat插件使用的tomcat版本是tomcat6

  • 而目前主流的tomcat,是使用的tomcat7,需要手动配置tomcat插件
    使用Tomcat7插件

使用tomcat7来运行web工程,它的命令是:tomcat7:run

9.继承

在Maven中的继承,指的是pom文件的继承

9.1 父类工程打包方式必须为pom方式

父类工程打包方式为pom

9.2子工程中会有一个parent标签来制定父工程的GAV

子工程需要引入父工程,使用parent标签

9.3父工程统一依赖jar包

在父工程中对jar包进行依赖,在子工程中都会继承此依赖。

9.4父工程统一管理版本号

dependencyManagement标签管理的依赖,其实没有真正依赖,它只是管理依赖的版本。

子工程就不用管版本号了

9.5父工程抽取版本号

${junit.version}

父工程抽取版本号

10.聚合

在真实项目中,一个项目有表现层、业务层、持久层,对于业务层和持久层,它们可以在多个工程中被使用,所以一般会将业务层和持久单独创建为java工程,为其他工程依赖。

10.1聚合工程的打包方式也必须为pom方式

聚合工程打包方式也必须为POM

10.2聚合工程的子工程创建选择Maven Module

创建子工程,使用Maven Module

10.3聚合工程的子工程如果是web工程,那么要打包方式要选择war

Web工程打包方式为War

10.4聚合为一个工程进行运行

聚合为一个工程运行

11.Maven仓库管理

11.1什么是Maven仓库?

存储所有Maven共享构建的地方。

11.2本地仓库

默认在~/.m2/repository,如果在用户配置中有配置,则以用户配置的地址为准

11.3远程仓库
11.4Maven私服的搭建
  • 私服的搭建,一般是由运维配置,若有需要,再在网上学习即可。
11.5从私服中下载构建

在setting.xml中配置(这个还是需要掌握的,因为公司一般都有私服,得知道怎么配置)

    <mirrors>
 <mirror>
     <!--此处配置所有的构建均从私有仓库中下载 *代表所有,也可以写central -->
     <id>nexus</id>
     <mirrorOf>*</mirrorOf>
     <url>http://localhost:8080/nexus-2.7.0-06/content/groups/public/</url>
 </mirror>

配置细节

11.6部署构建到Nexus

这个一般由运维同事配置,若有需要,再在网上学习。

12.Maven的命令(常用)

mvn compile
编译

mvn clean
清除已经target目录中的文件。

mvn test
测试命令,该命令将编译test目录中的源码

mvn package
打包文件

mvn install
安装命令,将打好的包,安装到本地仓库

mvn clean compile
清空再编译

mvn clean test
先清空,再执行test

mvn clean package
先清空,在执行package

mvn clean install
最常用命令。先清空target包中的文件,再将包安装到本地仓库中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值