一、Maven简介
Maven是apache基金会的开源项目,使用java语言开发。用于项目的自动构建,帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作,以及管理依赖,即项目中需要使用的其他资源,常见的是jar包。类似的自动化构建工具还有:Ant,Gradle(手机端)。
二、Maven的核心概念
Maven中的概念:POM、约定的目录结构、坐标、依赖管理、仓库管理、生命周期、插件和目标、继承、聚合。
2.1 约定的目录结构
Maven的使用方式:
1.独立使用:创建项目,编译代码,测试程序,打包,部署等等
2.和idea一起使用:通过idea借助maven,实现编码,测试,打包等等
2.2 pom文件
POM(Project Object Model)项目对象模型,把一个项目的结构和内容抽象成一个模型,(题外话:dom则是把页面抽象成一个模型)maven通过pom.xml文件实现项目的构建和依赖的管理。
坐标:确定资源,是资源的唯一标识,在maven中,每个资源都是坐标,坐标值是唯一的,简称gav。其中,groupId是组织名称,代码,公司的标识,常使用公司域名的倒写。artifactId是项目名称,如果groupId中有项目,此时当前的值就是子项目名,项目名是唯一的。version是项目的版本号,三位组成。 如果版本中由-SNAPSHOT,表示快照,不是稳定的版本。搜索坐标的地址:https://mvnrepository.com/
依赖(dependency):项目中要使用的其他资源(jar)。需要使用maven表示依赖,管理依赖,通过使用dependency和gav一起完成依赖的使用。需要在pom.xml文件中,使用dependencies和dependency,还有gav完成依赖的说明。
<dependencies>
<!-- 日志依赖 -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<veision>1.2.17</veision>
<dependency>
<!-- MySQL驱动,对应一个jar包,maven会根据gav坐标下载对应jar包-->
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.31</version>
</dependency>
<dependenies>
packaging项目打包的类型,有jar,war,ear,pom等等,默认是jar
2.3 仓库
maven的仓库存放的是:
1.maven工具自己的jar包
2.第三方的其他jar,比如项目中要使用mysql驱动
3.自己写的程序,可以打包为jar,存放到仓库。
仓库的分类:
1.本地仓库:位于你自己的计算机,它是磁盘中的某个目录。默认路径是你登录操作系统的账号的目录中/.m2/repository,maven从这个目录找要用的资源。
修改本地仓库的位置:修改maven工具的配置文件(maven的安装路径\conf\setting.xml)
步骤:
1.创建一个目录,作为仓库使用,目录不要有中文和空格,目录不要太深。
2.修改settings.xml文件,指定D:\openrepository这个目录
把/.m2/repository中的jar包复制到D:\openrepository
2.4 Maven的生命周期,插件和命令
maven的生命周期:项目构建的各个阶段,包括清理,编译,测试,报告,打包,安装,部署
插件:要完成构建项目的各个阶段,要使用maven的命令,执行命令的功能是通过插件完成的。插件就是jar,一些类。
命令:执行maven功能是由命令发出的。执行以下命令必须在命令行进入pom.xml所在目录
1) mvn clean:清理命令,作用删除以前生成的数据(字节码文件),删除target目录。
插件:maven-clean-plugin,版本是2.5
2)mvn compile:编译命令,执行的代码编译,把src/main/java目录中的java代码编译为class文件拷贝到target/classes目录。classes是存放类文件的根目录。
插件:maven-compiler-plugin,版本是3.1,编译代码的插件
maven-resources-plugin,版本是2.6,资源插件,处理文件的,作用是把src/main/resources目录中的文件拷贝target/classes目录中。
3)mvn test-compile:编译命令,编译src/test/java目录中的源文件,把生成的class文件拷贝到target/test-classes目录。同时把src/main/resources目录中的文件拷贝test-classes目录中
插件:maven-compiler-plugin,版本是3.1,编译代码的插件
maven-resources-plugin,版本是2.6,资源插件,处理文件的。
4)mvn test:(单元测试)测试命令,作用执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求。测试完会在target目录下生成surefire-reports测试报告。
插件:maven-surefire-plugin,版本2.12.4
5)mvn package:打包(通常之前会做清理mvn clean package),作用是把项目中的资源class文件和配置文件都放在一个压缩文件中,默认压缩文件是jar类型的。web应用是war类型,扩展是jar,war的。
插件:maven-jar-plugin,版本2.4,执行打包处理,生成一个jar扩展的文件,放在target目录下。生成的文件是artifactId-version.packaging组成的jar文件。打包的文件中包含的是src/main目录中的的所有生成的class文件和配置文件,和test无关。
6)mvn install:把生成的打包文件安装到maven仓库
插件:maven-install-plugin,版本2.4,把生成的jar文件安装到本地仓库
查看仓库中的jar文件
7)mvn deploy:部署主程序(会把本工程打包,按照本工程的坐标保存到本地库中,并且还会保存到私服仓库中,自动把项目部署到web容器中)
2.5 自定义配置插件
在pom.xml文件中,build标签中设置插件(通常不需要配置,最常用的是以下的配置编译版本插件)
三、Maven和IDEA的集成
3.1 idea中集成maven
idea中有一个自带的maven,我们要让idea使用自己安装的maven。
1)File->Settings->Build,Execution,Deployment->build tools->Maven
2)博主D盘repository下已有archetype-catalog.xml文件,不用写
3)(IDEA2018/2019)Other Settings->Settings for New Projects和以上一样的操作
3.2 创建普通的j2se工程(不依赖服务器)
1.创建新Module
pom.xml:
<build>标签中的内容是自动生成的插件,如果不需要,可以删掉整个build标签。
修改目录类型:
刷新pom文件,重新整理加载依赖:
3.3 创建web项目,加入servlet依赖
下面步骤和创建j2ee文件类似,修改模块名就ok
生成的目录:
添加servlet和jsp依赖:(servlet和tomcat中的文件相同)
手动创建controller以及HelloServlet:
在web文件中声明servlet:
新建index.jsp:
get请求:
创建show.jsp:
把项目发到Tomcat服务器上:
应用后启动Tomcat,成功后浏览器输入localhost:8080/项目名/文件名
3.4 导入已有项目
右上角项目结构->import Module
四、依赖管理
依赖范围:使用scope表示以来的范围
依赖范围表示:这个依赖(jar和里面类)在项目构建的哪个阶段起作用。
依赖范围scope:
compile:默认,参与构建项目的所有阶段。
test:测试,在测试阶段使用
provided:提供者。项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器这个依赖的jar包(servlet和jsp)
五、常用设置
1)properties里面的配置:
2)全局变量:多个依赖使用的版本号
注:lastUpdated结尾的jar包是不能用的
3)使用资源插件
处理的配置文件的信息,maven默认处理配置文件
默认规则:
1.Maven会把src/main/resources目录中的文件,拷贝到target/classes目录下
2.Maven只处理src/main/java目录中的.java文件,把这些java文件编译为class,拷贝到target/classes目录下,不处理其他文件。
3.解决2的问题:添加资源插件:告诉maven把src/main/java目录中的指定扩展名的文件拷贝到target/classes目录中。
在pom.xml文件中