-
Maven是一款自动化的构建工具
软件开发阶段
-
需求分析:分析项目具体完成的功能
-
设计分析:根据分析的结果,设计项目的使用技术
-
开发阶段:编译代码,自我测试
-
测试阶段:专业测试人员测试,出一个测试报告
-
项目的打包,发布阶段:给用户安装项目
-
Maven的作用:
-
项目的自动构建:帮助开发人员做项目代码的编译,测试,打包,安装,部署等工作
-
管理依赖:管理项目中的各种jar包
-
依赖:项目中需要使用的其他资源,常见的是jar
-
-
Maven中的概念
-
POM(project object model,工程对象模型)
-
约定的目录结构
-
坐标
-
依赖管理
-
仓库管理
-
生命周期
-
插件和目标
-
继承
-
聚合
-
解压缩后的文件:
-
bin:maven可执行命令
-
conf:maven工具的配置文件
-
约定的目录结构
-
maven项目使用的大多数遵循的目录结构
一个maven项目是一个文件夹,比如项目名是Hello Hello 项目文件夹 \src \main 主程序目录(完成目录功能的代码和配置文件) \java 源代码(包和相关的类定义) \resources 配置文件 \test 放置测试程序代码(开发人员自己写的测试代码) \java 测试代码的(junit) \resources 测试程序需要的配置文件 \pom.xml maven的配置文件,核心文件
POM:Project Object Model,项目对象模型,maven把项目当作模型处理,操作这个模型就是操作项目 maven通过pom.xml文件实现项目的构建和依赖的管理
坐标组成
-
groupId:组织名称,代码。公司、团体或单位的标识,通常是公司域名的倒写。如果名称中有“.”,则前面和后面都是独立的文件夹
-
artifactId:项目名称,如果groupId中有项目,此时当前的值就是子项目名,项目名是唯一的
-
version:版本,项目的版本号,三位组成。主版本号.次版本号.小版本号。如果版本号中有-SNAPSHOT,表示快照,不是稳定的版本
-
项目打包的类型:
-
packaging:有jar,war,ear,pom等,默认是jar
-
-
坐标作用:确定资源,是资源的唯一标识,maven中每个资源都是坐标,坐标值是唯一的,简称gav
Maven命令
-
mvn clean:清理命令,删除以前生成的数据,删除target目录
-
插件:maven-clean-plugin
-
-
mvn compile:编译命令,执行的代码编译,把src/main/java/目录中的java代码编译为class文件,同时把class文件拷贝到target/classes目录,这个目录classes是存放类文件的根目录(classpath,类路径)
-
maven-compiler-plugin,编译代码的插件
-
maven-resources-plugin,资源插件,处理文件。作用是把src/main/resources目录中的文件拷贝到target/classes目录中
-
-
mvn test-compile:编译命令,编译src/test/java目录中的源文件,把生成的class文件拷贝到target/test-classes目录,同时把src/test/resources目录中的文件拷贝到test-classes目录
-
maven-compiler-plugin,编译代码的插件
-
maven-resources-plugin,资源插件,处理文件。作用是把src/test/resources目录中的文件拷贝到target/test-classes目录中
-
-
mvn test:测试命令,执行test-classes目录的程序,测试src/main/java目录中的主程序代码是否符合要求测试命令执行的时候会把前面的前面的编译命令会执行一次,以此保证生成了class文件
-
maven-surefire-plugin
-
-
mvn package:打包,作用是把项目中的资源class文件和配置文件都放在一个压缩文件中,默认压缩文件是jar
-
通常是使用mvn clean package操作,把以前生成的数据清理,重新打包,更稳妥
-
web应用是war类型,扩展是jar,war
-
执行打包处理的时候会先执行编译和测试,再进行打包
-
maven-jar-plugin执行打包处理,生成一个jar扩展的文件,放在target目录下
-
生成的文件:
-
xxx-1-1.0-SNAPSHOT.jar
-
打包的文件名格式:artifactId-version.packaging(项目名-版本.打包类型)
-
打包的文件包含的是src/main目录中的所有生成的class和配置文件,和test无关
-
-
-
mvn install:把生成的打包的文件安装到maven仓库中
-
执行安装处理的时候会先执行编译、测试、打包,最后把打包的文件安装到仓库
-
插件:maven-install-plugin,把生成的jar文件放到仓库中
-
打包的文件在仓库中的位置:
-
D:repository\xxx\xxx-1\1.0-SNAPSHOT\xxx-1-1.0-SNAPSHOT.jar
-
位置的格式:仓库目录\组织名\项目名\版本号\打包的文件
-
-
依赖管理
-
依赖范围:使用scope表示依赖的范围
-
依赖范围表示:依赖(jar和里面的类)在项目构建的阶段起作用
-
依赖范围scope:
-
compile:默认,参与构建项目的所有阶段
-
test:测试,在测试阶段起作用,比如执行mvn test会使用junit
-
provided:提供者,项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器提供jar,最明显的是servlet和jsp依赖
-
-
不写scope默认是:compile
properties配置
-
在properties中定义标签,此标签就是一个变量,标签的文本就是变量的值,使用全局变量表示多个依赖使用的版本号
<properties> <log4j.version>1.2.17</log4j.version> <mysql.version>5.1.9</mysql.version> </properties> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <-- 使用全局变量:${变量名} --> <version>${log4j.version}</version> </dependency>
资源插件
-
处理maven配置文件的信息,maven默认处理配置文件
-
maven会把src/main/resources目录中的文件拷贝到target/classes目录下
-
maven只处理src/main/java目录中的.java文件,把这些文件编译为class文件,再拷贝到target/classes目录中,不处理其他文件
-
如果需要处理src/main/java目录中的其他文件,需要作一下操作:
-
<build> //资源插件:告诉maven把src/main/java目录中的指定扩展名的文件拷贝到target/classes目录中 <resources> <resource> <directory>src/main/java</directory> 需要处理的目录 <includes> //包括目录下的properties和xml等文件都会扫描到 <include>**/*.properties</include> <include>**/*.xml</include> </includes> //filtering选项false表示不启用过滤器,文件.properties已经起到过滤的作用 <filtering>false</filtering> </resource> </resources> </build>
常用标签
-
groupId:公司、团体或单位的标识,通常是公司域名的倒写
-
artifactId:项目名称,唯一的
-
version:项目的版本号,若版本号中含有SNAPSHOT,表示快照,不稳定的版本
-
scope:依赖范围
-
compile:参与构建项目的所有阶段,默认
-
test:测试,在测试阶段起作用
-
provided:提供者,项目在部署到服务器时,不需要提供这个依赖的jar,而是由服务器提供jar
-
-
parent:子项目中用parent标签继承父项目,子项目能继承的父项目的属性
-
relativePath
-
指定查找该父项目pom.xml的(相对)路径。默认顺序:relativePath > 本地仓库 > 远程仓库
-
没有relativePath标签等同…/pom.xml,即默认从当前pom文件的上一级目录找
-
子模块想要用父模块pom中的版本,需要配置relativePath属性
-
-
properties:自定义一个或多个Maven属性,在POM的其他地方使用${属性名}的方式引用该属性
-
packaging:打包方式
-
jar,默认方式,通常是开发时要引用通用类,打成jar包便于存放管理
-
war:是做好一个web网站后,打成war包部署到服务器
-
pom:打包可以作为其他项目的maven依赖
-
-
repository:项目所需的依赖可能不在中央仓库中,可能只存在于某个特定的公共仓库,此时需要配置多个远程仓库
-
profiles:配置开发过程中用到开发环境
-
plugins:默认生命周期中实际会用到的插件
-
executions:
-
id:指定唯一标识
-
phase:关联的生命周期阶段
-
goals下的goal:关联指定生命周期的目标
-
configuration:标签内进行配置时使用的标签是插件本身定义的
-
resources:来描述main包下的所有文件(包括java源文件),通过 include 或 exclude 标签,可以选择性的指定最终要打包到target目录下的文件
-
directory:用于指定要描述的资源的目录
-
includes:用于指定哪些资源要被加载到最终的类路径下
-
excludes:用于指定哪些资源不被加载到最终的类路径下
-
filtering:默认值为false,为true时表示要用pom中properties标签内定义的属性值对被描述资源文件中的占位符进行解析替换
-
-
-
-