maven学习笔记
maven是一个构建项目的工具。
1.maven作用
1.可以管理jar文件
2.自动下载jar和他的文档,源代码
3.管理jar直接的依赖,a.jar需要b.jar,maven会自动下载b.jar
4.管理你需要的jar版本
6.帮你测试你的代码是否正确
7.帮你打包文件,形成jar文件或者war文件
8.帮你部署项目。
maven的构建:
构建(build),是面向过程的(从开始到结尾的多个步骤),涉及到多个环节的协同工作。
构建过程的几个主要环节
①清理:删除以前的编译结果,为重新编译做好准备。
②编译:将Java源程序编译为字节码文件。maven可以同时把成百上千的文件编译成java-class文件,和javac不一样,javac一次只能编译一个文件。
③测试:针对项目中的关键点进行测试,确保项目在迭代开发过程中关键点的正确性。可以同时执行多个测试代码,同时测试多个功能。
④报告:在每一次测试后以标准的格式记录和展示测试结果。
⑤打包:将一个包含诸多文件的工程封装为一个压缩文件用于安装或部署。Java 工程对应 jar 包,Web 工程对应war包。
⑥安装:在Maven环境下特指将打包的结果——jar包或war包安装到本地仓库中。
⑦部署:将打包的结果部署到远程仓库或将war包部署到服务器上运行
Maven核心概念
1.POM:一个文件 名称是pom.xml。pom翻译过来是项目对象模型。maven把一个项目当做是一个模型使用。可以控制maven构建项目的过程,管理jar依赖。
2.约定的目录结构:maven项目的目录和文件的位置都是规定的
3.坐标:是一个唯一的字符串,用来表示资源的
4.依赖管理:管理你的项目可以使用jar文件
5.仓库管理:资源存放的位置
6.生命周期:maven工具构建项目的过程,就是生命周期
7.插件和目标:执行maven构建的时候用的工具是插件。
8.继承
9.聚合
仓库
仓库是存放东西的,存放maven使用的jar和我们项目使用的jar
包括:maven使用的插件(各种jar),自己项目中使用的jar(第三方的工具)
仓库分类:
本地仓库:即个人计算机上的文件夹,存放各种jar
远程仓库:在互联网上,使用网络才能使用的仓库
1.中央仓库:最权威的,所有开发人员都共享使用的一个集中地仓库。
https://repo.maven.apache.org:中央仓库的地址
2.中央仓库的镜像:就是中央仓库的备份,在各大洲,重要的城市都有镜像。
3.私服:在公司内部,在局域网中使用的,不对外使用。
maven仓库的使用不需要人为参与
POM文件
即 Project Object Model 项目对象模型。Maven 把一个项目的结构和内容抽象成一个模型,在 xml 文件中 进行声明,以方便进行构建和描述,pom.xml 是 Maven 的灵魂。所以,maven 环境搭建好之后,所有的学习和 操作都是关于 pom.xml 的。
pom.xml的基本信息:
坐标(gav):唯一值,在互联网中唯一标识一个项目的。
<artifactId>公司域名的倒写</artifactId>
<groupId>自定义项目名称</groupId>
<version>自定义版本号</version>
modelVersion:Maven模型的版本,对于Maven2和Maven3来说,他只能是4.0.0
groupId:组织id,一般是公司的域名的倒写
artifactId:项目名称,也是模块名称,对应groupId中项目中的子项目
version:项目的版本号,如果项目还在开发中,是不稳定版本,通常在版本后带-SNAPSHOT,version使用三位数字标识,例如1.1.0
packaging:项目打包的类型,可以使用jar、var、rar、ear、pom,默认是jar
https://mvnrepository.com/搜索使用的中央仓库,使用groupId或者artifactId作为搜索条件。
依赖:dependencies和dependency,项目中要使用的各种资源说明,相当于Java中的import
配置属性:properties,properties 是 用 来 定 义 一 些 配 置 属 性 的 , 例 如 project.build.sourceEncoding(项目构建源码编码方式),可以设置为 UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。
构建:build,build表示与构建相关的配置,例如设置编译插件的jdk版本
继承:parent,在 Maven 中,如果多个模块都需要声明相同的配置,例如:groupId、 version、有相同的依赖、或者相同的组件配置等,也有类似 Java 的继承机 制,用 parent 声明要继承的父工程的 pom 配置。
聚合:modules:在 Maven 的多模块开发中,为了统一构建整个项目的所有模块,可以提供一 个额外的模块,该模块打包方式为 pom,并且在其中使用 modules 聚合的 其它模块,这样通过本模块就可以一键自动识别模块间的依赖关系来构建所有 模块,叫 Maven 的聚合。
maven的生命周期,maven的命令,maven的插件
maven的生命周期:就是maven构建项目的过程:清理,编译,测试,报告,打包,安装,部署。
Maven的命令:maven独立使用,通过命令,完成Maven的生命周期的执行,maven可以通过命令完成项目的清理,编译,测试等等。
maven的插件:maven命令执行时,真正完成功能的是插件,插件就是一些jar文件,一些类。
junit
junit是一个专门测试的框架(工具),
junit测试的内容:测试的是类中的方法,每一个方法都是独立测试的,方法是测试的基本单位(单元)。
maven借助单元测试,批量的测试你类中的大量方法是否符合预期。
插件
插件可以在自己的项目中设置,最常使用的是 maven 编译插件。设置项目使用的 jdk 版本时通过编译插件指定。
pom.xml 文件<build>中设置。
<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>
在idea中配置maven
1.idea中内置了idea,但是一般不使用内置的mave,因为用内置的maven的设置不方便。所以使用自己安装的maven。
依赖
1.依赖范围,使用scope表示
scope的值有 compile,test,provided,默认是compile0
scope:表示依赖使用的范围,也就是在maven构建项目的哪些阶段中起作用,、
maven构建项目:清理,编译,测试,打包,安装,部署 过程(阶段)
compile | test | provided | |
---|---|---|---|
对主程序是否有效 | 是 | 否 | 是 |
对测试程序是否有效 | 是 | 是 | 是 |
是否参与打包 | 是 | 否 | 否 |
是否参与部署 | 是 | 否 | 否 |
maven常用属性
<properties>
<!--maven构建项目使用的编码,避免中文乱码-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--编译代码使用的jdk版本-->
<maven.compiler.source>1.7</maven.compiler.source>
<!--运行程序使用的jdk版本-->
<maven.compiler.target>1.7</maven.compiler.target>
</properties>
全局变量
在 Maven 的 pom.xml 文件中,<properties>用于定义全局变量,POM 中通过${property_name}的形式引用变量的值。
定义全局变量:
<properties>
<spring.version>4.3.10.RELEASE</spring.version>
</properties>
引用全局变量:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
指定资源位置
src/main/java 和 src/test/java 这两个目录中的所有*.java 文件会分别在 compile 和 test-compile 阶段被编译,编译结果分别放到了 target/classes 和 targe/test-classes 目录中,但是这两个目录中的其他文件都会被忽略掉,如果需要把 src 目录下的文件包放到 target/classes 目录,作为输出的 jar 一部分。需要指定资源文件位置。以下内容放到<build>标签中。
<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>