Maven本质上是一种项目管理、部署工具,提供了如下功能:
创建mvn工程
- 项目构建
- 文档
- 报告
- 依赖处理
- SCMs
- 发布版本
- 包分发
mvn -B archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4maven工具生命周期
- 验证:验证工程是否正确
- 编译: 将源码编译为可执行工程
- 单元测试: 运行单元测试内容
- 打包: 将编译后的代码打包
- 集成测试: 如果需要,将打好的包部署在环境上
- 检查包: 检查包
- 包安装到本地: 将包安装到本地仓库,用于其他工程引用
- 包部署到远程仓库: 将最终的包上传到远程仓库,共其他开发者使用
maven pom文件标签含义mvn clean dependency:copy-dependencies package此命令将清理项目、复制依赖项并打包项目(当然,执行打包之前的所有阶段)。
4.0.0 com.mycompany.app my-app1.0-SNAPSHOT my-app http://www.example.com UTF-8 1.7 1.7 junit junit4.11 test ... lots of helpful plugins
二、使用指南 maven基本命令 编译和测试
- project pom文件顶级元素
- modelVersion POM使用的对象模型的版本
- groupId 工程唯一组织标识符
- artifactId 项目生成的组件唯一名
- version 工程版本号
- name 工程名字,可用于文档
- url 工程url,可用于访问文档
- properties 属性占位符
- dependencies 依赖项
- build 插件相关
mvn compile #编译应用源代码 mvn test #编译测试源码,运行单元测试用例 mvn test-compile #仅编译测试源码打包安装
mvn package #打jar包 mvn install #将jar包安装到本地仓库,在user/.m2/repository目录下 mvn site #自定义mvn站点 mvn clean #清理target目录下的工程包maven其他操作 如何理解version中的SNAPSHOT?
可理解为开发分支最新代码,并不保证代码的稳定性,一般是发布版本之前的版本。例如:version 1.0-SNAPSHORT对应的发布版本就是version 1.0。
如何使用mvn插件?类似依赖操作,需要添加到对应插件配置中,下面配置的是jdk1.5对应的编译器。
如何将资源文件打包到jar包中?在固定目录${basedir}/src/main/resources下添加即可,测试用例中如果需要使用资源文件,只需要将资源文件放在固定目录${basedir}/src/test/resources中即可。
资源文件在jar包中的位置:/BOOT-INF/classes/。
在build时,如何从外部文件获取值填充到资源文件application.properties中?使用resource标签,并设置filtering标签属性为true,在资源文件中通过${name}获取。如果不开启filtering标签true,则资源文件中无法获取到pom.xml文件中配置的值。
pom.xml中配置filetering:
src/main/resources false
1)资源文件从pom.xml文件中获取值
1.0-SNAPSHOT my-app ...hello in
- 资源文件application.properties从pom文件读取值
application.name=${project.name}
application.version=${project.version}
message=${my.filter.value}
- 执行mvn process-resources 命令后的输出:
application.name=my-app application.version=1.0-SNAPSHOT message=hello in
2)资源文件从外部文件中读取值
- 创建外部文件filter.properties(src/main.filters/fiter.properties)
my.filter.value=hello out
- pom.xml中配置需要读取的外部文件
src/main/filters/filter.properties
- application.properties资源文件读取外部文件值
message=${my.filter.value}
- 执行mvn process-resources 命令后的输出:
message=hello out
3)资源文件从系统配置、命令行获取值
- application.properties资源文件获取配置值、命令行值
java.version=${java.version}
command.line.prop=${command.line.prop}
user.home=${user.home}
- 执行mvn process-resources "-Dcommand.line.prop=hello again" 命令后的输出:
java.version=1.8.0_211 command.line.prop=hello again user.home=/Users/jains
Noting
如何引入外部依赖?1.资源文件可读取到pom.xml文件,用户settings.xml文件,外部属性文件以及系统配置文件中的值。
2.resource标签下的includes和excludes标签可以于filtering标签配置使用,用于排除、包含外部文件。
junit junit4.11 test
从哪里引入依赖包?
首先从本地仓库引入,本地仓库路径:${user.home}/.m2/repository。如果本地仓库不存在需要引入的依赖包,会从远程仓库下载包到本地仓库,远程仓库默认url:
https://repo.maven.apache.org/maven2/如何将自己的jar包部署到远程仓库?
- 在pom.xml文件中配置远程仓库url
mycompany-repository MyCompany Repository scp://repository.mycompany.com/repository/maven2
- 在settings.xml文件中配置远程仓库登陆认证信息
...... mycompany-repository jvanzyl /path/to/identity (default is ~/.ssh/id_dsa)my_key_passphrase
Noting
如何创建父子工程?setting.xml文件中密码加密,public-key见Maven – Password Encryption
- 父级pom.xml文件添加子模块、添加子包依赖
注意:需要将父级pom.xml打包方式修改为pom,如果不指定类型,默认是jar类型。
4.0.0 com.mycompany.app app1.0-SNAPSHOT app pom my-app
- 子模块pom.xml文件添加父级依赖
com.mycompany.app app1.0-SNAPSHOT com.mycompany.app.my-app my-app1.0-SNAPSHOT
注意:子模块需要修改groupId和artifactId



