官网介绍
https://maven.apache.org/what-is-maven.html
为什么要使用maven
1、使得构建过程更加容易,方便编译、打包、发布
2、为每个项目提供统一的配置
3、提供优质项目信息
4、最佳开发实践
5、安装和更新第三插件透明化
Maven项目的结构和内容是在一个XML文件中声明,pom.xml的项目对象模型(POM),这是整个Maven系统的基本单元。
在于:
Maven中使用约定,约定java源代码代码必须放在哪个目录下,编译好的java代码又必须放到哪个目录下,这些目录都有明确的约定。
Maven的每一个动作都拥有一个生命周期,例如执行 mvn install 就可以自动执行编译,测试,打包等构建过程
只需要定义一个pom.xml,然后把源码放到默认的目录,Maven帮我们处理其他事情
使用Maven可以进行项目高度自动化构建,依赖管理(这是使用Maven最大的好处),仓库管理
小结:
maven(翻译内行、专家)是跨平台的项目管理工具。主要服务于基于java平台的项目构建,依赖管理和项目信息管理
构建过程
清理项目------编译项目------测试项目-------生成测试报告------打包项目--------部署项目
生命周期
依次来:
clean:在进行真正的构建之前进行清理工作
validate:验证项目是否正确且所有必须信息是可用的
compile:执行编译(编译源代码)
test:测试,单元测试框架进行测试
package:打包,jar,war在pom.xml中定义,并存放到target目录下
verify:检查,对集成测试的结果进行检查,以确保质量达标
install:安装打包的项目到本地仓库,以供其他项目使用
deploy:部署,拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
site:生成项目报告,站点,发布站点
运行任何一个阶段的时候,前面的所有阶段都会被运行,运行mvn install 的时候,代码会被编译,测试,打包
下载
官网下载,下载后
bin:含有mvn运行的脚本
boot:含有plexus-classworlds类加载器框架
conf:含有settings配置文件
lib:含有maven运行时所需要的java类库
LICENSE.txt, NOTICE.txt, README.txt针对Maven版本,第三方软件等简要介绍
注意:保证自己电脑上已经安装了jdk(1.7或者以上)
配置环境变量
系统变量
环境变量加入path中
查看他是否配置成功
仓库管理
maven仓库用来统一存储所有maven共享构建的位置,存放jar包(因为每次一个项目中需要导入jar包,所以仓库的好处体现着,jar包的依赖)
修改本地仓库
默认下载的jar包是放在C:\xxx\xxx.m2\repository
更改这个仓库,在这个settings.xml修改
这样就更换了仓库的地址
增加*仓库
*仓库保存了对外开放的所有jar包,需要的jar包在http://search.maven.org/这里找(远程仓库)。网络原因,用
阿里云仓库http://maven.aliyun.com
本地仓库和*仓库的关系:
私服
大部分公司都会搭建私服,局域网仓库。
公司搭建局域网,公司自己搞个仓库,这样我们至极使用公司搭建的私服就行了,为了减少网络开销以及开发成本(毕竟外网访问速度慢)
这样本地仓库和*仓库和私服的关系:
插件
每个插件都能实现多个功能,每个功能就是一个插件目标
Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务,
<build>
<finalName>mavenHello</finalName>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.3.7.v20160115</version>
<configuration>
<httpConnector>
<port>8080</port>
<host>localhost</host>
</httpConnector>
<scanIntervalSeconds>1</scanIntervalSeconds>
</configuration>
</plugin>
</plugins>
</build>
例如compile就是插件maven-compiler-plugin的一个插件目标
排除不需要的依赖:
<dependency>
<groupId>xx</groupId>
<artifactId>xx</artifactId>
<version>xx</version>
<exclusions>
<exclusion>
<groupId>xx</groupId>
<artifactId>xxx</artifactId>
</exclusion>
</exclusions>
</dependency>
exclusions中可以有多个exclusion元素,可以排除一个或者多个依赖的传递,声明exclusion时只需要写上groupId、artifactId就可以了,version可以省略
使用
用maven搭建一个web项目:
小结:一个maven项目的结构:
有ide这种工具,使用起来更好,根本不需要用命令去创建一个maven项目
常用的命令:
mvn compile:编译项目,编译成功后会增加一个target目录(编译后的文件)
mvn clean:删除target整个目录
mvn test:测试,前提是我们集成了junit,并且有test目录,还有对应的测试类,target目录下多了个test-classes目录
mvn package:打包(打成jar包或者war包)
mvn install:安装,就是把我们的打包好的jar或者war包,安装到我们的本地仓库中去
-Dmaven.test.skip(=true):跳过测试
-Dmaven.tomcat.port=9090:指定端口
-Dmaven.test.failure.ignore=true:忽略测试失败
mvn eclipse:eclipse: 生成eclipse项目 。
mvn idea:idea:生成idea项目。
mvn test-compile:编译测试的内容 。
mvn test -skipping compile -skipping test-compile:只测试而不编译,也不测试编译 。
mvn -version/-v:显示版本信息 。
mvn -Dmaven.test.skip=true:不执行测试用例,也不编译测试用例类。
mvn -e : 显示详细错误 信息.
mvn -U :强制更新依赖包
mvn -B :该参数表示让Maven使用批处理模式构建项目
mvn clean install -pl user-dao:只对user-dao进行安装。
springboot:run:就是运行Spring Boot项目,对应还有start、stop。
mvn jetty:run:在jetty上运行项目
mvn help:system 显示平台详细信息的列表,例如系统属性和环境变量。
mvn help:active-profiles 列出了当前对构建[有效的配置]文件。
mvn help:all-profiles 列出当前项目下的可用配置文件。
mvn help:describe:描述插件和/或Mojo(Maven普通的Old Java Object)的属性 。
mvn help:evaluate:以交互方式评估用户给出的Maven表达式。
mvn help:effective-pom:将有效的POM显示为当前版本的XML,并考虑了活动配置文件。如果为verbose,则会向每个XML元素添加一个注释,以描述行的起点。
mvn help:effective-settings:会在给定配置文件增强功能以及将全局设置继承到用户级别设置的情况下,将计算出的设置显示为项目的XML。
-D和-P参数:
-D 表示 Properties属性,而 -P 表示 Profiles配置文件
pom.xml文件
<modelVersion>4.0.0</modelVersion>
<groupId>com.qj</groupId>
<artifactId>SSM_01</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>SSM_01 Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
</dependency>
</dependencies>
</properties>
<modelVersion>
:模型版本<groupId>
:公司或者组织的唯一标志,并且配置时生成的路径也是由此生成,如:com.qj,maven会将该项目打成的jar包放本地路径:/com/qj<artifactId>
:本项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的<version>
:本项目目前所处的版本号<packaging>
:打包的机制,如pom、jar、maven-plugin、ejb、war、ear、 rar、par,默认为jar<name>
:项目名称<url>
:*仓库地址<dependencies>
:定义本项目的依赖关系<dependency>
:每个dependency都对应这一个jar包。一般情况下,maven是通过groupId、artifactId、version这三个元素值(俗称坐标)来检索该构件, 然后引入你的工程。如果别人想引用你现在开发的这个项目(前提是已开发完毕并发布到了远程仓库),就需要在他的pom文件中新建一个dependency节点,将本项目的groupId、artifactId、version写入, maven就会把你上传的jar包下载到他的本地
<scope>
:依赖范围。scope包含如下的取值:compile(编译范围)、provided(已提供范围)、runtime(运行时范围)、test(测试范围)、system(系统范围)
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>1.9.4</version>
-DgroupId=commons-beanutils
-Dversion=1.9.4