1、Maven简介
Maven 翻译为"专家"、“内行”,是 Apache 下的一个纯 Java 开发的开源项目。基于项目对象模型(缩写:POM)概念,Maven利用一个中央信息片断能管理一个项目的构建、报告和文档等步骤。
Maven 是一个项目管理工具,可以对 Java 项目进行构建、依赖管理。
Maven 也可被用于构建和管理各种项目,例如 C#,Ruby,Scala 和其他语言编写的项目。Maven 曾是 Jakarta 项目的子项目,现为由 Apache 软件基金会主持的独立 Apache 项目。
1.1 Maven的作用
- maven可以管理jar文件
2)自动下载jar和他的文档,源代码
3)管理jar直接的依赖, a.jar需要b.jar ,maven会自动下载b.jar
4)管理你需要的jar版本
5)帮你编译程序,把java编译为class
6)帮你测试你的代码是否正确。
7)帮你打包文件,形成jar文件,或者war文件
8)帮你部署项目
1.2 Maven项目的构建
构建是面向过程的,就是一些步骤,完成项目代码的编译,测试,运行,打包,部署等等。
maven支持的构建包括有:
- 1.清理,把之前项目编译的东西删除掉,我新的编译代码做准备。
- 2.编译,
把程序源代码编译为执行代码,java-class文件
批量的,maven可 以同时把成千上百的文件编译为class.
javac不一样,javac一次编译一个文件。 - 3.测试,maven可以执行测试程序代码,验证你的功能是否正确。
批量的,maven同时执行多个测试代码,同时测试很多功能。 - 4.报告,生成测试结果的文件,测试通过没有.
- 5.打包,把你的项目中所有的class文件,配置文件等所有资源放到一个压缩文件中.
这个压缩文件就是项目的结果文件,通常java程序,压缩文件是.jar
扩展名的。
对于web应用,压缩文件扩展名是.war
.
2、Maven的核心概念
①POM
:一个文件,名称是pom.xml
,pom翻译过来叫做项目对象模型。maven把一个项目当做一个模型使用。控制maven构建项目的过程,管理jar依赖。
②约定的目录结构:maven项目的目录和文件的位置都是规定的。
③坐标:是一个唯一的字符串,用来表示资源的。
④依赖管理: 管理你项目可以使用的jar文件。
⑤仓库管理: 你的资源存放位置
⑥生命周期: maven工具构建项目的过程,就是生命周期。
⑦插件和目标:执行maven构建的时候用的工具是插件
⑧继承
⑨聚合
2.1. 约定的目录结构
2.2 仓库
2.2.1 仓库是什么
仓库是存放东西的,存放maven使用的jar和我们项目使用的jar
- maven使用的插件(各种jar )
- 我项目使用的jar(第三方的工具)
2.2.2 仓库的分类
- 本地仓库,就是 你的个人计算机上的文件夹,存放各种jar
- 远程仓库,在互联网_上的,使用网络才能使用的仓库
①:中央仓库,最权威的,所有的开发人员都共享使用的-一个集中的仓库,
https ://repo.maven.apache.org
:中央仓库的地址
②:中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都是镜像。
③:私服,在公司内部,在局域网中使用的,不是对外使用的。
2.2.3 仓库的使用
maven仓库的使用不需要人为参与。
开发人员需要使用mysql驱动—>maven首先查本地仓库—>私服—>镜像–>中央仓库
2.3 pom文件
基本信息 | |
---|---|
modelVersion | Maven模型的版本,对于Maven2和Maven3来说,它只能是4.0.0 |
groupID |
组织ID,一般是公司域名的倒写。格式为:①域名倒写:com.baidu 。②域名倒写+项目名:com.baidu.app |
artifactID |
项目名称,也是模块名称,对应groupID中项目的子项目 |
version |
项目的版本号。如果项目还在开发中,是不稳定版本,通常在版本后面带 -SNAPSHOT 。version使用三位数字标识,例如1.1.0 |
packaging |
项目打包的类型。可以使用jar、war、rar、ear、pom,默认是jar,web应用是war |
依赖 | |
dependencies 和dependency |
Maven的一个重要作用就是管理jar包,为了一个项目可以构建或运行,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些jar就被称为依赖,使用标签dependency来配置。而这种依赖的配置正是通过坐标来定位的,由此我们也不难看出,maven把所有的jar包也都视为项目存在了。 |
配置属性 | |
properties |
properties是用来定义一些配置属性的,例如project.build.sourceEncoding (项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。 |
构建 | |
build |
build表示与构建相关的配置,例如设置编译插件的jdk版本 |
继承 | |
parent |
在Maven中,如果多个模块都需要声明相同的配置,例如:groupId、version、有相同的依赖、或者相同的组件配置等,也有类似Java的继承机制,用parent声明要继承的父工程的pom配置。 |
聚合 | |
modules |
在Maven的多模块开发中,为了统一构建整个项目的所有模块,可以提供一个额外的模块,该模块打包方式为pom,并且在其中使用modules聚合的其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有模块,叫Maven的聚合。 |
2.3.1 坐标
坐标:唯一值,在互联网中唯一标识一个项目的
groupID、artifactID、version三个元素生成一个Maven项目的基本坐标,在众多的maven项目中可以唯一定位到某一个项目。坐标也决定着将来项目在仓库中的路径和名字。
<groupId>公司或组织的域名倒序+当前项目名称</groupId>
<artifactId>当前项目的模块名称</artifactId>
<version>当前模块的版本</version>
2.3.2 依赖
dependencies
和dependency
,相当于是java中的import
在项目中要使用的各种资源说明。
2.4 生命周期
maven的生命周期:清理、编译、测试、报告、打包、安装、部署。
对项目的构建是建立在生命周期模型上的,它明确定义项目生命周期各个阶段,并且对于每一个阶段提供相对应的命令,对开发者而言仅仅需要掌握一小堆的命令就可以完成项目各个阶段的构建工作。构建项目时按照生命周期顺序构建,每一个阶段都有特定的插件来完成。不论现在要执行生命周期中的哪个阶段,都是从这个生命周期的最初阶段开始的。
对于我们程序员而言,无论我们要进行哪个阶段的构建,直接执行相应的命令即可,无需担心它前边阶段是否构建,Maven都会自动构建。这也就是Maven这种自动化构建工具给我们带来的好处。
2.4.1 单元测试junit
单元测试:用的是junit,junit是一个专门测试的框架。
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的。方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期的。
第①步:
<!--单元测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
第②步:
在maven项目中的src/test/java
目录下,创建测试程序。
推荐的创建类和方法的提示:
- 1.测试类的名称是Test + 你要测试的类名
- 2.测试的方法名称是: Test + 方法名称;
2.5 编译插件配置
即JDK:可以指定JDK的版本号
<!--控制配置 maven构建项目的参数设置,设置jdk的版本-->
<build>
<!--配置插件-->
<plugins>
<!--配置具体的插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<!--插件的名称-->
<artifactId>maven-compiler-plugin</artifactId>
<!--配置插件的信息-->
<configuration>
<!--告诉maven 我们写的代码是在jdk1.8上编译的。-->
<source>1.8</source>
<!--我们的程序应该运行在1.8的jdk上-->
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
表示使用jdk_1.8。【修改后更新项目】
3、Maven在IDEA中的引用
3.1 IDEA新建工程设置maven
idea中内置了maven,一般不使用内置的,因为用内置修改maven的设置不方便。
使用自己安装的maven,需要覆盖idea中的默认的设置。让idea指定maven安装位置等信息
配置的入口
①:配置当前工程的设置:file--settings ---Build,Execution, Deployment--Build tools- -Maven--Runner
- Maven Home directory: maven 的安装目录
- User Settings File :就是maven安装目录conf/ setting . xm1配置文件
- Local Repository :本机仓库的目录位置
VM options : -DarchetypeCatalog=internal
可以加快项目创建
在 IDEA 的 Settings 窗口的 Build, Execution, Deployment > Build Tools > Maven > Runner 中对 VM Option 设置
②配置以后新建工程的设置:file–other setting --Setting for New Project
3.2 IDEA创建javase项目
使用模版创建项目
maven- archetype -quickstart
:普通的java项目
3.3 IDEA创建web项目
maven- archetype -webapp
:普通的web项目
3.4 IDEA导入maven项目
File -- > Project Setting --> Modules --> +号 -->import Module--> 选中要导入的文件--> 选择import module from external module --> Maven --> Dependencies --> 配置JDK
4、依赖管理
4.1 依赖的范围
使用scope
b表示,依赖的范围:compile、test、provided,默认采用compile
compile | test | provided | |
---|---|---|---|
对主程序是否有效 | 是 | 否 | 是 |
对测试程序是否有效 | 是 | 是 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
5、Maven常用设置
5.1 maven属性设置
<properties >
设置maven常用属性
<!--Maven构建项目使用编码,避免中文乱码-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
5.2 全局变量
在Maven的 pom.xml文件中,<properties>
用于定义全局变量, POM中通过${property_name}
的形式引用变量的值。
自定义的属性:
1.在<properties>
通过自定义标签声明变量(标签名就是变量名)
2.在pom. xml文件中的其它位置,使用${标签名}
使用变量的值
自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,先使用全局变量定义,在使用${变量名}
定义全局变量:
<properties>
<spring.version>4.3.10.RELEASE</spring.version>
</properties>
5.3 资源插件
<build>
<resources><resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes<!--包括目录下的.properties , .xml文件都会扫描到-->
<include>**/*.properties</include>
<include>**/* . xml</ include>
</includes>
<!--filtering选项false不启用过滤器,*.property已经起到过滤的作用了-->
<filtering>false</filtering>
</resource>
</resources>
</build>
作用:mybatis课程中会用到这个作用。
- 1.默认没有使用resources的时候, maven执行编译代码时,会把
src/main/resources
目录中的文件拷贝到target/classes
目录中。
对于src/main/java
目录下的非java文件不处理,不据贝到tarcet/classes
目录中 - 2.我们的程序有需要把一些文件放在src/main/java目录中,当我在执行java程序时,需要用
src/main/ java
目录中的文件.
需要告诉maven 在mvm compile src/main/java
目录下的程序时,需要把文件一同拷贝到target/classes
目录中。
此时就需要在<build>
中加入<resources>