- 工信部备案号 滇ICP备05000110号-1
- 滇公网安备53011102001527号
- 增值电信业务经营许可证 B1.B2-20181647、滇B1.B2-20190004
- 云南互联网协会理事单位
- 安全联盟认证网站身份V标记
- 域名注册服务机构许可:滇D3-20230001
- 代理域名注册服务机构:新网数码
- CN域名投诉举报处理平台:电话:010-58813000、邮箱:service@cnnic.cn
Maven是Apache基金会提供的项目管理工具, 其采用项目对象模型(Project Object Model, POM)描述项目配置, 并使用生命周期模型管理构建过程中各种操作.
maven使用pom.xml来管理项目, 该文件通常位于项目的根目录中:
4.0.0 com.example sample pom 1.0-SNAPSHOT
pom.xml的根元素为
工程组
构件名
版本号
这三个字段对于任何pom.xml来说都是不可或缺的.
在maven中每个项目被称为一个构件(artifact), 三个字段用于唯一标识构件. maven中每个依赖项都是构件, 我们开发的项目也是构件, 便于被其它项目引用.
可以通过配置
4.0.0 com.example sample pom 1.0-SNAPSHOT sample-parent com.example 1.0
Maven可以将项目分为多个模块(Module), 每个Module包含一个pom.xml文件独立的进行配置管理:
4.0.0 com.example sample-parent pom 1.0 service sample util
注意父模块的打包方式只能是pom, 不能是jar或war.
pom.xml中可以定义
1.8 4.12
使用propery避免硬编码:
junit junit ${junit.version}
maven使用生命周期的概念来管理构建中的各种操作. maven定义了三个周期(lifecycle), 每个周期分为若干阶段(phase):
clean生命周期: 构建前的清理工作
pre-clean阶段: 清理前要做的工作
clean阶段: 清理上一次构建生成的文件
post-clean阶段: 清理后要做的工作
build生命周期: 构建生命周期, 又称default生命周期
validate阶段: 检查配置是否正确
compile阶段: 编译工程源码, 此阶段前会进行代码生成, 拷贝资源等阶段(操作).
test-compile阶段: 编译测试源码
test阶段: 执行测试代码
package阶段: 将项目打包, 如jar, war等.
verify阶段: 检查发布包是否合格
install阶段: 将发布包安装到本地仓库中, 可以作为其它项目的依赖
deploy 阶段: 将包发布到远程仓库, 以共享给其它项目或工程
site生命周期: 生成报告, 部署站点
pre-site阶段
site阶段
post-site阶段
site-deploy阶段
常用的mvn clean命令将会执行clean生命周期的pre-clean和clean阶段, 而mvn package命令则执行build周期的validate到package阶段.
也就是说mvn
每个阶段的具体操作由插件(plugin)来执行, 每个插件可以完成一个或多个目标(goal), 每个阶段可以依次绑定0个或若干个目标.
也就是说, maven通过目标(goal)将具体操作和抽象的阶段绑定. 如maven-compiler-plugin插件的两个目标:compiler:compile和compiler:test-compile分别与compile和test-compile阶段绑定.
依赖管理是maven的重要功能, 它通过仓库管理依赖的jar包. maven仓库有三种类型:
本地仓库: 本地仓库是本地保存jar包的目录. 对于linux和os x系统, 本地仓库地址一般为~/.m2/repository
远程仓库: 若本地仓库中没有包含某个依赖包, maven可以从远程仓库中下载依赖包到本地仓库.
中央仓库: 中央仓库是maven社区维护的远程仓库, 保存了大量依赖包, 不需要配置即可访问.
junit junit ${junit.version}
同样用
在多模块(Module)项目中, 即使
junit junit ${junit.version}
在当前pom中不需要指定依赖的版本:
junit junit
当前pom会从本文件开始逐层向上搜索DependencyManagement, 以确定依赖版本号.
通常maven中每个依赖项都是一个maven构件, 它们也会依赖其它的构件. 因此在pom.xml中定义的依赖关系会形成树状结构.
maven-dependency-plugin插件提供了一些便利的依赖分析与管理工具:
mvn dependency:tree: 以显示依赖的树状结构
mvn dependency:analyze: 分析声明的依赖是否被实际使用
不同的maven构件可能依赖同一个包的不同版本, 这种树状结构给依赖管理带来严峻挑战.
org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty
上述配置要求maven忽略SpringBoot默认的starter-tomcat换用starter-jetty, 在构建时将不会安装spring-boot-starter-tomcat而是在classpath中寻找合适的替代.
于是我们在自己的pom中定义了starter-jetty依赖, 在构建时将会搜索到starter-jetty作为starter-tomcat的替代.
target target/classes target/test-classes ${project.artifactId}-${project.version} src/main/java src/test/java src/main/resources src/test/resources org.apache.maven.plugins maven-install-plugin 2.5.2
上述示例中配置了源码和资源目录的位置以及所需的插件. 和
org.apache.maven.plugins maven-install-plugin 2.5.2
我们经常会遇到在调试和生产环境中使用不同配置的情况, maven的profile功能可以满足需求:
debug com.example.DebugMain debug-sample online com.example.AppMain sample true
只有被激活的profile中的配置才是有效的. activeByDefault可以设置profile是否默认激活, maven命令中的-P
售前咨询
售后咨询
备案咨询
二维码

TOP