• 1. MAVEN实战政府本部 事业二部 方清晨 2011年9月
  • 2. MAVEN 英文意思“内行、专家”; MAVEN 是Apache组织开源项目,是项目管理工具; MAVEN 主要服务于Java平台的项目构建、依赖管理和项目信息管理; 官网:http://maven.apache.org 什么是MAVEN
  • 3. JavaEE工程师javaEE架构师javaEE项目的项目经理培训对象
  • 4. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 5. 去官网下载MAVEN压缩包; 解压即可; 配置环境变量M2_HOME等于解压目录路径; 在环境变量path增加%M2_HOME%/bin/; 在环境变量增加内存配置MAVEN_OPTS等于 -Xms128m -Xmx512m 命令行窗口测试mvn –version;MAVEN安装和配置
  • 6. Myeclipse已经能解决编译、打包、部署,但它是收费的,maven是开源的; Maven可以将现有应用进行分模块处理,查找方便; 很多开源项目是基于Maven开发的,下载源代码后,Maven可以自动下载相关jar包,从而对开源项目进行二次开发; 由于jar包不用上传svn,减轻svn的压力; 用了maven,Debug可以自动跟踪源代码; 方便做单元测试,自动生成站点、报告; 为什么要用MAVEN
  • 7. pom文件配置较为复杂; 掌握maven的开发工程师较少; …maven缺点
  • 8. bin 包含了mvn的运行脚本,脚本配置java命令; m2.conf用来配置默认仓库(repository); boot 只有一个文件,java类加载器; conf 包含一个非常重要的文件settings.xml; lib Maven运行时需要的java类库; Maven内置的超级pom文件在maven-model-builder-x.x.x.jar; MANEN的目录结构
  • 9. 一般maven项目的目录结构
  • 10. pom.xml是maven项目的核心; 第一个项目的pom.xml文件 4.0.0 com.taiji.mvn helloworld 1.0-SNAPSHOT helloworld jar pom.xml( Project Object Model )说明
  • 11. project根节点 groupId 实际项目ID,一般与实际项目包名定义; 例如:spring项目org.springframework,junit项目就是junit; artifactId 项目(模块)ID; 通常已实际项目为前缀,例如:spring-core,junit等;pom.xml坐标含义
  • 12. version 定义项目(模块)目前的版本;分为SNAPSHOT(快照)、RELEASE(发布)等; Jar包的名称artifactId-version.jar,所以artifactId一般以实际项目简称为前缀,例如:spring-core-3.0.5-RELEASE.jar packaging Maven项目的打包方式,默认为jar。Web项目是war,聚合项目是pom; Name 就是个名字,没啥意义。 pom.xml坐标含义
  • 13. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 14. 新建helloworld项目的目录结构; 新建上例的pom文件; 新建Helloword.java; 开始第一个maven项目
  • 15. mvn [options] [goal(s)] [phase(s)] mvn compile mvn compiler:compile mvn org.apache.maven.plugins:maven-compiler-plugin:compile mvn org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile 上面四条命令效果相同,第一种是用的生命周期阶段phase,后面三种是用的插件目标goal;Maven 命令详解
  • 16. clean pre-clean clean post-clean default validate initialize generate-sources process-sources generate-resources process-resources Maven的三个生命周期
  • 17. compile process-classes generate-test-sources process-test-sources generate-test-resources test-compile process-test-classes test prepare-package package pre-integration Maven的三个生命周期
  • 18. integration-test post-integration-test verify install deploy site pre-site site post-site site-deploy 按顺序从上到下;Maven的三个生命周期
  • 19. 与目标类包名相同; 类名后加Test; Junit4.7后用@test标注要测试的方法; 新建HelloWorldTest.java; 由于test类依赖junit,在pom文件添加坐标(依赖),配置junit的包; Maven测试机制
  • 20. Mavne测试目录机构
  • 21. org.apache.maven.plugins maven-site-plugin 3.0-beta-2 org.apache.maven.plugins maven-javadoc-plugin 2.7 org.apache.maven.plugins maven-jxr-plugin 2.1 true org.apache.maven.plugins maven-surefire-report-plugin2.6 org.codehaus.mojo cobertura-maven-plugin 2.4 xml html org.apache.maven.plugins maven-checkstyle-plugin 2.6 将以上配置放入pom.xml中即可; 测试mvn site;site生命周期的配置
  • 22. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 23. dependencies节点包含多个dependency; 每个dependency又包含: groupId、artifactId、version; type依赖的类型,默认为jar; scope依赖的范围; optional是否可选; exclusions排除传递依赖; 关于坐标配置
  • 24. dependency节点下scope compile(默认范围) 编译依赖范围 对编译、测试、运行三种classpath都有效; test 测试依赖范围 只对于测试classpath有效,如:junit; provided 已提供依赖范围 编译和测试classpath有效,运行时无效,如:servlet-api runtime 运行时依赖范围 测试、运行classpath有效,编译时无效,如:jdbc驱动实现 System 系统依赖范围 可使用环境变量,但应该慎用; import 与dependency相关随后介绍;依赖范围
  • 25. 传递性依赖定义 A依赖于B,B依赖于C,A对于C是传递性依赖; 非maven项目 下载核心包后,还需手动下载相关依赖; 例如:如果一个基于Spring Framework的项目,不使用maven需手动下载相关依赖。例如spring-framework-2.5.5-with-dependencies.rar; maven项目 maven可以通过项目中的pom.xml文件加载相关依赖; 再通过依赖的项目中的pom文件继续加载相关依赖; 直到所有依赖加载完成;传递性依赖
  • 26. compiletestprovidedruntimecompilecompile--runtimetesttest--testprovidedprovided-providedprovidedruntimeruntime--runtime传递性依赖与依赖范围注:纵轴表示第一直接依赖,横轴表示第二直接依赖; “-”表示不传递依赖;
  • 27. 第一原则:路径最近者优先 第二原则:第一声明者优先 第三原则:和版本无关依赖调解(Dependency Mediation)
  • 28. dependencies节点包含多个dependency; 每个dependency又包含: groupId、artifactId、version; type依赖的类型,默认为jar; scope依赖的范围; optional是否可选; exclusions排除传递依赖; 关于坐标配置
  • 29. 场景 比如B是一个持久层的工具包,他支持多种数据库,包括mysql、mssql等,在构建这个工具包的时候,需要两种数据库的驱动程序,但在使用这个工具包的时候,只会依赖一种数据库; 可选依赖不会被传递,必须显示的声明;可选依赖
  • 30. dependencies节点包含多个dependency; 每个dependency又包含: groupId、artifactId、version; type依赖的类型,默认为jar; scope依赖的范围; optional是否可选; exclusions排除传递依赖; 关于坐标配置
  • 31. 排除依赖——阻断依赖关系 节点可包含多个 每个exclusion只包含groupId和artifactId,因为同一个项目不可能出现groupId和artifactId相同但version不同的两个依赖; 主要用途是控制SNAPSHOT版本,一个依赖的不稳定可能会引起整个项目的不稳定;排除依赖
  • 32. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 33. 一条命令构建多个模块; pom 元素来表示 每个module的值都是一个当前pom的相对目录 聚合模块是单项与module关联,在module中不增加配置;聚合模块特点
  • 34. 去除冗余配置 父子类型关系,单项,只需要在子模块中配置; relativepath默认值是../pom.xml 继承模块的特点
  • 35. groupId Version Description Organization Inception year url Developer Contributors DistributorManagement 可继承的POM元素
  • 36. issueManagement ciManagement scm mailingLists properties dependencies dependencyManagement repositories biuld reporting可继承的POM元素
  • 37. 元素下的依赖声明不会引入实际的依赖,但能约束dependencies下的依赖使用; 也有类似的效果;依赖管理、插件管理
  • 38. 聚合与继承的关系聚合模块被聚合模块被聚合模块被聚合模块父模块子模块子模块子模块
  • 39. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 40. 坐标和依赖是任何一个构件在Maven世界中的逻辑表达方式; 构件的物理表示方式是文件,Maven通过仓库来统一管理这些文件,没有仓库,Maven失去了存在的意义; 任何构件都有唯一坐标,根据坐标定义其在仓库中的唯一存储路径; groupId/artifactId/version/artifact-version.packaging Maven仓库
  • 41. 仓库本地仓库远程仓库中央仓库私服其他公共库仓库的分类
  • 42. http://repo1.maven.org/maven2中央仓库url
  • 43. 通过仓库搜索引擎 http://www.jarvana.com/jarvana/ http://mvnrepository.com/ http://www.mvnbrowser.com/index.html如何查找jar包
  • 44. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 45. 专业版是付费,与开源版本的区别是增加了企业安全控制、发布流程控制等需要的特性; http://nexus.sonatype.org/downloads/下载私服仓库Nexus
  • 46. 三个用户对应三个权限 admin/admin123 deployment/deployment123 anonymous部署运行
  • 47. pom nexus Team Nexus Repository http://192.168.3.180:8080/nexus/content/groups/public 配置Maven从nexus下载构件(1)
  • 48. Setting dev nexus http://192.168.3.180:8080/nexus/content/groups/public/ true true dev 配置Maven从nexus下载构件(2)
  • 49. Pom文件中自定义属性 内置属性 ${basedir},${version} Pom属性 ${project.artifactId} Setting属性 ${setting.localRepository} Java属性 ${user.home} 环境变量属性 ${env.JAVA_HOME} Maven的属性
  • 50. 大纲生命周期坐标、依赖聚合、继承仓库Maven 实战安装、入门私服仓库——nexusEclipse插件
  • 51. 和nexus一样,是sonatype的开源工具; 基于eclipse的插件; 官方站点地址http//m2eclipse.sonatype.orgEclipse插件——M2eclipse
  • 52. 创建导入maven项目 管理依赖 自动下载依赖 自动解析依赖的sources与javadoc 使用模板创建maven项目 浏览远程仓库 与svn集成 ……M2eclipse功能
  • 53. 参考文献
  • 54. fangqch@mail.taiji.com.cn 由(www.51document.com,nosql.51document.com)分享。
  • 55. 结束谢谢!