1 第3章 Maven使用入门
1.1 pom.xml结构/配置
见附录A
1.2 settings.xml结构/配置
见附录B
1.3 其他:
遇到错误:(请使用 -source 5 或更高版本以启用静态导入声明)
maven的核心compiler插件默认只支持编译Java 1.3,因此需要配置该插件使其支持1.5,加上plugin:
<!--<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
2 第5章 坐标
2.1 maven坐标:
- groupId 必须定义
- artifactId 必须定义
- version 必须定义
- packaging 可选;打包方式,jar还是war,默认是jar
- classifier 不能直接定义;定义附属构件;
2.2 maven test: junit
发送邮件Demo:test_maven.tar.gz,通过mvn clean test测试执行
3 第5章 maven依赖:
3.1 scope种类:
- compile
- test
- provided
- runtime
- system
- import 不会对实际的classpath产生影响,用于dependencyManagement中
3.2 scope与classpath关系
Scope | 编译有效 | 测试有效 | 运行时有效 | 例子 |
---|---|---|---|---|
compile | Y | Y | Y | spring-core |
test | Y | junit | ||
provided | Y | Y | servlet-api | |
runtime | Y | Y | JDBC | |
system | Y | Y | 本地Maven库外的类库文件 |
3.3 依赖传递
compile | test | provided | runtime | |
---|---|---|---|---|
compile | compile | runtime | ||
test | test | |||
provided | provided | provided | provided | |
runtime | runtime | runtime |
注:左侧第一列是A,上面第一行是B,A依赖B
3.4 冲突调解法则
- 第一法则:路径最近者优先
- 第二法则:第一声明者优先
4 第6章 仓库
4.1 分类:
- 本地仓库
- 远程仓库
- 中央仓库
- 私服
- 其他项目公共库
4.2 settings.xml配置
......
4.3 依赖解析机制
- A scope是system时,直接从本地文件系统加载;若不是转B;
- B 根据坐标,从本地库寻找;若未找到转C;
- C 若依赖的版本是显式发布的本版构件,则遍历所有远程仓库下载之;否则,转D;
- D 无论依赖RELEASE/LATEST还是SNAPSHOT,则读取远程/groupId/artifactId/maven-metadata.xml,将其与本地仓库对应元数据maven-metadata-local.xml合并,得到最新版本从本地/远程下载之;转E;
- E 对于SNAPSHOT版本而言,如果得到了时间戳格式的,则转为SNAPSHOT格式的名字作为构件名字。
注:我的理解,书上讲的没有彻底看明白
5 第7章 生命周期与插件
5.1 clean周期
阶段 | 描述 | 插件目标 | 描述 |
---|---|---|---|
pre-clean | |||
clean | maven-clean-plugin:clean | ||
post-clean |
5.2 default周期
阶段 | 描述 | 插件目标 | 描述 |
---|---|---|---|
validate | |||
intialize | |||
generate-sources | |||
process-sources | |||
generate-resources | |||
process-resources | maven-resources-plugin:resources | 复制..到主输出目录 | |
compile | maven-compile-plugin:compile | 编译..到主输出目录 | |
process-classes | |||
generate-test-sources | |||
process-test-sources | |||
generate-test-resources | |||
process-test-resources | maven-resources-plugin:testResources | 复制..到主输出目录 | |
test-compile | maven-compile-plugin:testCompile | 编译..到主输出目录 | |
process-test-classes | |||
test | maven-surefire-plugin:test | ||
prepare-package | |||
package | maven-jar-plugin:jar | ||
pre-integration-test | |||
integration-test | |||
post-integration-test | |||
verify | |||
install | maven-install-plugin:install | ||
deploy | maven-deploy-plugin:deploy |
5.3 site周期
阶段 | 描述 | 插件目标 | 描述 |
---|---|---|---|
pre-site | |||
site | maven-site-plugin:site | ||
post-site | |||
site-deploy | maven-site-plugin:deploy |
5.4 自定义绑定
plugin节点内嵌execution节点,可以配置执行一个任务
5.5 常用插件
名称 | 描述 |
---|---|
maven-archetype-plugin | 构建项目 |
maven-clean-plugin | 清理 |
maven-compiler-plugin | 编译 |
maven-deploy-plugin | 部署 |
maven-install-plugin | 安装 |
maven-resources-plugin | 处理资源 |
maven-site-plugin | 生成站点 |
maven-surefire-plugin | 测试 |
maven-surefire-report-plugin | 生成单元测试报告 |
maven-jar-plugin | 打jar |
maven-war-plugin | 打war |
maven-shade-plugin | |
maven-changelog-plugin | 生成版本变更报告 |
maven-checkstyle-plugin | 生成CheckStyle报告 |
maven-javadoc-plugin | 生成JavaDoc文档 |
maven-jxr-plugin | 生成源码交叉引用文档 |
maven-pmd-plugin | 生成PMD报告 |
maven-project-info-reports-plugin | 生成项目信息报告 |
maven-antrun-plugin | 调用ant |
maven-assembly-plugin | 构建自定义格式分发包 |
maven-dependency-plugin | 依赖分析 |
maven-enforcer-plugin | 定义强制遵守规则 |
maven-pap-plugin | 生成PGP签名 |
maven-help-plugin | 获取信息 |
maven-invoker-plugin | 自动运行项目并验证 |
maven-release-plugin | 自动化版本发布 |
maven-scm-plugin | 集成版本控制系统 |
maven-source-plugin | 生成源码包 |
maven-eclipse-plugin | 生成Eclipse项目 |
build-helper-maven-plugin | 包含各种生命周期的目标 |
exec-maven-plugin | 运行系统/Java程序 |
maven-license-plugin | 获取许可证 |
versions-maven-plugin | 批量更新POM版本 |
properties-maven-plugin | 读取properties文件 |
jboss-maven-plugin | 管理jboss |
sql-maven-plugin | 管理sql |
tomcat-maven-plugin | 管理tomcat |
cargo-maven-plugin | 管理各类Web容器 |
jetty-maven-plugin | 管理jetty容器 |
maven-gae-plugin | 管理GoogleAppEngine |
maven-android-plugin | 构建Android项目 |
注:标蓝的是用过的
5.6 插件解析
- A pluginRepositories节点配置插件仓库
- B 解析插件的groupId artifactId version
- C 解析插件前缀
5.7 插件目标
列出插件目标命令: mvn help:describe -Dplugin=eclipse
6 项目集成:聚合与集成
1 两者关系:
- 聚合是为了快速构建多个模块项目;集成是为了避免重复
- 它们的packaing都是pom类型
- 一个POM有可能既是聚合,又是父POM供继承
2 Maven核心理念:
Convention Over Configuration 约定优于配置
可以自定义约定,比如<build><sourceDirectory>src/java</sourceDirectory></build>
3 反应堆 Reactor
指的是所有模块组成的一个构建结构
反应堆的构建顺序,不一定是<module>节点的声明顺序
反应堆裁剪是为了有选择的构建某些模块,总不能动不动就构建所有模块吧。反应堆裁剪命令:
- -am 同时构建所列模块的依赖模块
- -amd 同时构建依赖于所列模块的模块
- -pl 构建指定的模块,模块间逗号隔开
- -rf 从指定的模块回复反应堆
7 Maven系统属性
参考:http://www.imxylz.info/wiki/Java/MavenProperties
类别 | 属性 | 说明 |
---|---|---|
project.* 引用POM中定义的字段 | project.groupId | |
project.version | ||
project.artifactId | ||
project.name | ||
project.description | ||
project.build.sourceDirectory | 源代码目录, 默认src/main/java | |
project.build.scriptSourceDirectory | 脚本源代码目录, 默认src/main/scripts | |
project.build.testSourceDirectory | 测试源代码目录, 默认src/test/java | |
project.build.outputDirectory | 输出目录,默认target/classes | |
project.build.testOutputDirectory | 输出目录,默认target/test-classes | |
project.build.directory | 输出目录,默认target/ | |
project.baseUri | 完整的项目目录路径 | |
project.basedir | 完整的项目目录路径 | |
settings.* 引用settings.xml中定义的变量 | settings.localRepository | 本地仓库路径 |
env.* 引用环境变量 | env.HOME | 当前用户主目录 |
env.PATH | 系统执行路径 | |
env.JAVA_HOME | ||
env.M2_HOME | Maven2的安装路径 | |
系统属性 引用System.getProperty()中的属性 | java.version | Java Runtime Environment version |
java.vendor | Java Runtime Environment vendor | |
java.vendor.url | Java vendor URL | |
java.home | Java installation directory | |
java.vm.specification.version | Java Virtual Machine specification version | |
java.vm.specification.vendor | Java Virtual Machine specification vendor | |
java.vm.specification.name | Java Virtual Machine specification name | |
java.vm.version | Virtual Machine implementation version | |
java.vm.vendor | Java Virtual Machine implementation vendor | |
java.vm.name | Java Virtual Machine implementation name | |
java.specification.version | Java Runtime Environment specification version | |
java.specification.vendor | Java Runtime Environment specification vendor | |
java.specification.name | Java Runtime Environment specification name | |
java.class.version | Java class format version number | |
java.class.path | Java class path | |
java.ext.dirs | Path of extension directory or directories | |
os.name | Operating system name | |
os.arch | Operating system architecture | |
os.version | Operating system version |