一、Maven简介
1、Maven介绍
Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。
当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后Maven可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
1)传统开发项目的问题,没有使用maven管理的项目
① 很多模块,模块之间有关系,手动管理关系,比较繁琐
② 需要很多第三方功能,需要很多jar文件,需要手动从网络中获取各个jar
③ 需要管理jar的版本
④ 管理jar文件之间的依赖,例如,项目要使用a.jar需要使用b.jar中的类,必须先获取到b,jar才可以。
a.jar需要b.jar这个关系叫做依赖。
2)maven的作用
① maven可以管理jar文件
② 自动下载jar和它的文档、源代码
③ 管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar
④ 管理需要的jar版本
⑤ 帮助编译程序,把java编译成class
⑥ 测试代码是否正确
⑦ 帮助打开文件,形成jar文件,或者war文件
⑧ 帮助部署项目
2、项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等待。
maven支持的构建包括有:
① 清理:把之前项目编译的东西删除,为新的编译代码做准备。
② 编译:把程序源代码编译为执行代码,java-class文件(批量的)
maven可以同时把上万的文件编译为class,与javac不同,javac一次编译一个文件
③ 测试:maven可以执行测试程序代码,验证功能是否正确(批量的)
④ 报告:生成测试结果的文件,测试是否通过
⑤ 打包:把项目中所有的class文件,配置文件等所有资源放到一个压缩文件中。
这个压缩文件就是项目的结果文件,通常java程序,压缩文件是jar扩展名的,对于web应用,压缩文件扩展名是.war
⑥ 安装:把⑤中生成的文件jar、war安装到本机仓库
⑦ 部署:把程序安装好可以执行
3、Maven核心概念
① POM:是一个文件,名称是pom.xml,pom翻译过来叫做项目对象模型。
maven把一个项目当作一个模型使用,控制maven构建项目的过程,管理jar依赖。
② 约定的目录结构:maven项目的目录和文件的位置都是规定的。
③ 坐标:是一个唯一的字符串,用来表示资源的
④ 依赖管理:管理项目使用的jar文件
⑤ 仓库管理(了解):资源的存放位置
⑥ 生命周期(了解):maven工具构建项目的过程,就是生命名周期
⑦ 插件和目标(了解):执行maven构建的时候用的工具是插件
⑧ 继承:父子关系
⑨ 聚合:几个项目归纳到一起
二、Maven的核心概念
1、Maven工程约定目录结构
每一个maven项目在磁盘中都是一个文件夹(例如项目-Hello)
Hello/
---/src 源代码
------/main 放主程序java代码和配置文件
---------/java 主程序包和包中的java文件(主程序的java源码)
---------/resources java程序中要使用的配置文件
------/test 放测试程序代码和文件(可以没有)
---------/java 测试程序包和包中的java文件
---------/resources 测试java程序中要使用的配置文件
---/pom.xml maven的核心文件(maven项目必须有)
2、设置本机存放资源的目录位置(设置本机仓库)
1)修改maven的配置文件,maven安装目录/conf/settings.xml(先备份settings.xml)
2)修改 指定目录(不要使用中文目录)
3)D:\JavaWeb\Maven\maven_repository
3、仓库
1)仓库是什么:仓库是存放东西的,存放maven使用的jar和项目使用的jar
maven使用的插件(各种jar)
项目使用的jar(第三方的工具)
2)仓库的分类
本地仓库:就是个人计算机上的文件夹,存放各种jar
远程仓库:在互联网上的,使用网络才能使用的仓库
① 中央仓库:最权威的,供所有开发人员共享使用的一个集中的仓库。
http://repo.maven.apache.org 中央仓库的地址
② 中央仓库的镜像:就是中央仓库的备份
③ 私服:在公司内部,在局域网中使用的
3)仓库的使用,maven仓库的使用不需要认为参与
例如开发人员使用mysql驱动:
maven首先查本地仓库--->私服--->镜像--->中央仓库
4、 pom文件
Project Object Model项目对象模型,Maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,pom.xml是Maven的灵魂。
1)基本信息
groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标(唯一标识)。
<groupId>公司域名的倒写</groupId>
<artifactId>自定义项目名称</artifactId>
<version>自定义版本号<version>
https://mvnrepository.com/ :搜索使用的中央仓库,使用groupId或者artifactId作为搜索条件。
2)依赖、配置属性、构建、继承、聚合
依赖举例如下:
<dependencies>
<!--依赖 java代码中import-->
<dependency>
<groupId>mysql</groupId>
<artifacrId>mysql-connector-java</artifactId>
<version>5.1.9</version>
</dependency>
</dependencies>
5、 Maven的生命周期、 Maven的命令、Maven的插件
maven的生命周期:
就是maven构建项目的过程,清理,编译、测试、报告、打包、安装、部署。
maven的命令:
maven独立使用,通过命令,完成maven的生命周期的执行,可以使用命令,完成项目的清理、编译、测试等。
maven的插件:
maven命令执行时,真正完成功能的是插件,插件就是一些jar文件(一些类)。
补maven命令:
mvn compile
编译main/java/目录下的java为class文件,同时把class拷贝到target/classes目录下面;把main/resources目录下的所有文件都拷贝到target/classes目录下
mvn package
打包的只是src/main中的所有文件
mvn install
把项目打包成工具保存到本地仓库,以便之后的项目可以使用
build:
控制配置maven构建项目的参数设置,设置jdk的版本
<build>
<!--配置插件-->
<plugins>
<!--配置具体的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<!--插件的名称-->
<artifactId>maven-compiler-plugin</artifactId>
<!--插件的版本-->
<version>3.8.1</version>
<!--配置插件的信息-->
<configuration>
<!--告诉maven写的代码是在jdk1.8上编译的-->
<source>1.8</source>
<!--程序应该运行在1.8的jdk上-->
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
三、Maven在IDEA中应用
1、在idea中设置maven,让idea和maven结合
idea中内置了maven,一般不使用内置的,因为用内置修改maven的设置不方便。使用安装的maven,需要覆盖idea中默认的设置,让idea指定maven安装位置等信息。
配置的入口:
① 配置当前工程的设置,file---settings---build,Excution,Deployment---Build Tools---Maven
Maven Home path:maven的安装目录
User Settings File:就是maven安装目录cinf/setting.xml配置文件
Local Repository:本机仓库的目录位置
-DarchetypeCatalog=internal,maven项目创建时,会联网下载模板文件,比较大,使用它,不用下载,创建maven项目速度快。
② 配置以后新建工程的设置,file---New Projects Settings---Set for new projects
具体与上述相同
2、使用模板创建项目
1)maven-archetype-quickstart:普通的java项目
2)maven-archetype-webapp:web项目
3)IDEA中导入已有的Maven工程(module)
四、依赖管理
1、依赖的范围 - - - 使用scope表示
scope的值有:compile、test、provided- - - 默认是compile
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段中起作用。
maven构建项目:编译,测试,打包,安装,部署过程(阶段)。
五、Maven常用设置
1、maven的属性设置
<properties>设置maven的常用属性
例如:
<properties>
<!--maven构建项目使用的是UTF-8,避免中文的乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编译java代码使用的jdk版本-->
<maven.compiler.source>1.8</maven.compiler.source>
<!--java项目应该运行在什么样的jdk版本-->
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
2、maven自定义全局变量
自定义的属性:
① 在<properties>中通过自定义标签声明变量(标签名就是变量名)
② 在pom.xml文件中的其他位置,使用 ${标签名} 使用变量的值
自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,再使用${变量名}
举例如下:
<properties>中
<dependencies>中
3、资源插件
作用:mybatis课程中会用到这个作用
① 默认没有使用resources的时候,maven执行编译代码时,会把src/main/resources目录中的文件拷贝到target/classes目录中;
对于src/main/java目录下的非java文件不处理,不拷贝到target/classes目录中。
② 程序有需要把一些文件放到src/main/java目录中,当执行java程序时,需要用到src/main/java目录中的文件;
需要告诉maven再mvn compile src/main/java目录下的程序时,需要把文件一同拷贝到target/classes目录中;
此时就需要再<build>中加入<resources>。