1 基本要点

来源:互联网 发布:淘宝设置优惠价格 编辑:程序博客网 时间:2024/05/16 09:23

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编译有效测试有效运行时有效例子compileYYYspring-coretest Y junitprovidedYY servlet-apiruntime YYJDBCsystemYY 本地Maven库外的类库文件
3.3 依赖传递
 compiletestprovidedruntimecompilecompile  runtimetesttest   providedprovided providedprovidedruntimeruntime  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打jarmaven-war-plugin打warmaven-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调用antmaven-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管理jbosssql-maven-plugin管理sqltomcat-maven-plugin管理tomcatcargo-maven-plugin管理各类Web容器jetty-maven-plugin管理jetty容器maven-gae-plugin管理GoogleAppEnginemaven-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/javaproject.build.scriptSourceDirectory脚本源代码目录, 默认src/main/scriptsproject.build.testSourceDirectory测试源代码目录, 默认src/test/javaproject.build.outputDirectory输出目录,默认target/classesproject.build.testOutputDirectory输出目录,默认target/test-classesproject.build.directory输出目录,默认target/project.baseUri完整的项目目录路径project.basedir完整的项目目录路径

settings.*

引用settings.xml中定义的变量

settings.localRepository本地仓库路径

 

env.*

引用环境变量

env.HOME当前用户主目录env.PATH系统执行路径env.JAVA_HOME env.M2_HOMEMaven2的安装路径









系统属性

引用System.getProperty()中的属性

java.version

Java Runtime Environment versionjava.vendorJava Runtime Environment vendorjava.vendor.urlJava vendor URLjava.homeJava installation directory  java.vm.specification.versionJava Virtual Machine specification versionjava.vm.specification.vendorJava Virtual Machine specification vendorjava.vm.specification.nameJava Virtual Machine specification namejava.vm.versionVirtual Machine implementation versionjava.vm.vendorJava Virtual Machine implementation vendorjava.vm.nameJava Virtual Machine implementation name  java.specification.versionJava Runtime Environment specification versionjava.specification.vendorJava Runtime Environment specification vendorjava.specification.nameJava Runtime Environment specification namejava.class.versionJava class format version number  java.class.pathJava class pathjava.ext.dirsPath of extension directory or directories  os.nameOperating system nameos.archOperating system architectureos.versionOperating system version

原创粉丝点击