1.介绍
项目的构建:构建是面向过程的,就是一些步骤,完成项目代码的编译、测试、运行、打包、部署等;
maven支持的构建包括:
1.清理:把之前项目编译的东西删除掉,为新的编译代码做准备;
2.编译:把程序源代码编译为执行代码,.java到.class文件,它是批量的,maven可以同时把成千上百个文件编译成.class文件,javac一次只能编译一个文件;
3.测试:maven可以执行测试程序代码,验证功能是否正确,它是批量的,maven可以同时执行多个测试代码,同时测试很多功能;
4.报告: 生成测试结果的文件;
5.打包: 把项目中的所有class文件、配置文件等所有资源放到一个压缩到文件中,这个压缩文件就是项目的结果文件,java程序的压缩文件通常是.jar为扩展名的,web应用的压缩文件的扩展名通常是.war;
6.安装:把jar文件、war文件安装到服务器;
2.pom.xml-项目对象模型
Project-Object-Model;
maven把一个项目的结构和内容抽象成一个模型,在xml文件中进行声明,以方便进行构建和描述,控制maven构建项目的过程,pom.xml是maven的灵魂;
3.坐标gav
maven把任何一个插件都作为仓库中的一个项目进行管理,用一组向量组成的坐标来表示,坐标在仓库中可以唯一定位一个maven项目;
groupId:组织名,通常是公司或者组织域名倒序+项目名;
artifactId:模块名,通常是工程名;
version:版本号;
4.编译-compile
编译命令,到项目文件下,src的上级目录下,cmd 执行mvn compile,然后maven会下载相关插件;
插件的存放目录:C:\Users\Administrator\.m2\repository,该目录也叫本机仓库;
5.仓库
仓库可以存放maven使用的jar包和我们项目使用的jar包(第三方工具);
仓库分为本地仓库和远程仓库;
远程仓库包括:
中央仓库:最权威的,所以开发人员共享使用的一个集中仓库;
中央仓库镜像:中央仓库的备份,在各大洲,重要的城市都有一份中央仓库的镜像;
私服:在公司内部,局域网使用,不对外开放;
中央仓库地址:https://mvnrepository.com/
Maven – Welcome to Apache Maven
仓库插件下载顺序,先去本地仓库查找,没有的话再去私服,再去最近的城市查找镜像库,再去中央仓库下载;
6.packaging
打包后压缩文件的扩展名,默认是jar;
7.依赖
dependencies,dependency;
一个maven项目的正常运行需要其他项目的支持,maven会根据坐标自动到本地仓库查找;功能类似于import;
依赖范围用scope约束,表示该依赖在maven构建的哪些阶段中起作用;
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
依赖范围的3个选项:
compile:编译、测试、打包、安装、部署阶段使用该jar包;
test:只在maven的测试阶段使用该jar包;
provided:编译、测试阶段使用该jar包,项目部署后服务器已经提供该jar包;
默认是compile
8.生命周期
就是maven构建项目的过程:
清理:mvn clean
编译:mvn compile 编译src/main/java/目录下的java文件为class文件,同时class文件移动到target/classes文件夹下,同时把main/resources目录下的所有文件拷贝到target/classes文件夹下;
测试:mvn test-compile 编译测试程序;
打包:mvn package
安装:mvn install 安装到本地maven仓库中,供其他项目使用;
部署:mvn deploy,一般不用;
9.单元测试
junit是一个专门测试的框架,测试的是类中的方法,每个方法都是独立测试的,方法是测试的基本单元,所以又叫单元测试;
10.插件配置
<build>
<!-- 配置插件 -->
<plugins>
<!-- 配置具体插件 -->
<plugin>
<groupId>org.maven.apache.palugins</groupId>
<!-- 插件的名称 -->
<artifactId>maven-compiler-plugin</artifactId>
<!-- 插件的版本 -->
<version>3.8.1</version>
<configuration>
<!-- 告诉maven,我们写的代码是在jdk17上编译的 -->
<source>17</source>
<!-- 告诉maven,我们的程序应该运行在jdk17上-->
<target>17</target>
</configuration>
</plugin>
</plugins>
</build>
11.属性
<properties>
<!-- maven构建项目使用编码 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 编译代码使用的jdk版本 -->
<maven.compiler.source>17</maven.compiler.source>
<!-- 运行程序使用的jdk版本 -->
<maven.compiler.target>17</maven.compiler.target>
</properties>
自定义属性:
首先在properties内通过自定义标签声明变量,标签名就是变量名,然后在pom.xml的其他位置用${标签名}调用;
自定义全局变量一般是定义依赖的版本号,当你的项目中要使用多个相同的版本号,可以使用自定义全局变量统一修改;
12.资源插件
在没有使用resources的时候,maven执行编译代码时,会把src/main/resources下的文件拷贝到target/classes目录中,对于arc/main/java下的非java文件不进行任何处理,不会拷贝到target/classes目录中;
添加resources则可以把需要的资源拷贝到classes目录下;
<build>
<resources>
<resource>
<!-- 资源路径 -->
<directory>src/main/java</directory>
<includes>
<!-- 路径下只有properties/xml文件都会被扫描到 -->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<!-- 不启用过滤器,*.properties已经起到过滤作用了 -->
<filtering>false</filtering>
</resource>
</resources>
</build>