• 1. Maven2项目构建和管理工具姜宪瑶 ( Jiang.Xianyao@zxelec.com ) 2018/10/221
  • 2. Agenda了解Maven2 安装Maven2 使用Maven22
  • 3. 了解Maven213
  • 4. 了解Maven2Maven2的目标 使项目构建构成更容易 提供统一构建系统 提供高质量的项目信息 提供开发的最佳实践指南 能无缝的加入新的特性4
  • 5. 了解Maven2主要功能 构建项目(Builds) 项目报告(Reporting) 依赖管理(Dependencies) 一致的项目build流程和结构5
  • 6. 了解Maven2Maven2如何工作?内部仓库外部仓库2机1项目A项目BInstall 构件A或B机2项目3机1 本地仓库下载构件外部仓库1机2 本地仓库依赖依赖Deploy 构件A或B获取构件A和B下载构件A和B获取构件A6
  • 7. 了解Maven2Maven2架构?Local machineRemote repository or local installPlugin e.g. jarPlugin e.g. releasePlugin e.g. surefireProjects to buildMaven Core7
  • 8. 了解Maven2核心概念 项目生命周期 依赖管理 仓库 插件和构件 项目对象模型POM Profile8
  • 9. 了解Maven2缺省项目生命周期及各阶段(phase) validate initialize generate-sources, process-sources generate-resources, process-resources compile, process-classes generate-test-sources, process-test-sources generate-test-resources, process-test-resources test-compile test. package pre-integration-test, integration-test, post-integration-test verify install deploy clean and site9
  • 10. 了解Maven2依赖管理 dependency 通过坐标groupId:artifactId:version管理依赖的构件和插件 Binary依赖 自动下载 依赖关系透明传递 依赖范围 scope 依赖类型type SNAPSHOT处理 com.zxelect B 1.0-SNAPSHOT compile 10
  • 11. 了解Maven2仓库repository 存储构件和插件的服务器 远程仓库 本地仓库 仓库服务器软件:如nexus, Artifactory false central Maven Repository Switchboard http://repo1.maven.org/maven2 11
  • 12. 了解Maven2构件artifact maven 项目生成和管理的最小单元 坐标 groupId:artifactId:version packaging: pom,jar,war… 关系:依赖,parent,modulescom.zxelec.bell viss pom 1.0.1-SNAPSHOT viss-parent com.zxelec.bell 1.0.1-SNAPSHOT viss-parent viss-license 12
  • 13. 了解Maven2插件和目标(plugin and goal) 辅助maven 核心完成各种可重用功能的构件 plugin是一个单个或者多个目标的集合 goal是maven中的一个“工作单元(unit of work)”,mojo 可配置将插件目标绑定到某个phase 例子:source:jar-no-fork, help:describe org.apache.maven.plugins maven-source-plugin 2.1.1 attach-sources verify jar-no-fork phasespluginsgenerate- sourcescompiletestinstalldeploypackageintegration- testmojomojomojomojomojobindings13
  • 14. 了解Maven2项目对象模型POM 描述项目相关信息 继承:super pom,effective pom 多模块 pom配置指导: http://maven.apache.org/pom.html 例子 4.0.0 org.codehaus.mojo my-project 1.0 14
  • 15. 了解Maven2Profile 描述:是一组可选的配置,可以用来设置或者覆盖配置默认值 定义location:全局及本地maven配置文件、pom同级profiles.xml、pom.xml 注:配置可参考pom和setting配置中profile部分 激活profile 例子: test local.aaa 15
  • 16. 安装Maven2216
  • 17. 安装Maven2需安装JDK1.5 开发工具:Eclipse3.5 Maven2安装 下载及解压http://maven.apache.org 添加maven bin目录到PATH环境 执行mvn –version测试安装 安装指导:http://maven.apache.org/download.html#Installation 第一次使用指导:http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html Eclipse插件 m2eclipse安装 update site:http://m2eclipse.sonatype.org/update 17
  • 18. 安装Maven2-配置全局配置-[maven安装目录]/conf/settings.xml 多个用户共享该配置,如内部的仓库服务器,缺省maven选项等; User本地配置-[user_home]/.m2/settings.xml 配置用户私密信息,如用户名密码、本地的环境变量等等; Settings配置指导:http://maven.apache.org/settings.html18
  • 19. 使用Maven2319
  • 20. 使用Maven2-常用命令使用build phase mvn clean compile test package install deploy site 使用插件 mvn help:describe help:effective-pom help:effective-settings help:evaluate mvn exec:java mvn assembly:assembly assembly:single mvn jetty:run jetty:run-war mvn site:site site:deploy Mvn release:prepare release:perform Mvn cargo:deploy cargo:undeploy20
  • 21. 使用m2eclipse-新建向导21
  • 22. 使用m2eclipse-右键菜单22
  • 23. 使用m2eclipse-run菜单23
  • 24. 使用m2eclipse-pom编辑124
  • 25. 使用m2eclipse-pom编辑225
  • 26. 使用m2eclipse-pom编辑326
  • 27. 使用m2eclipse-pom编辑427
  • 28. 使用m2eclipse-pom编辑528
  • 29. 使用m2eclipse-pom编辑629
  • 30. 使用m2eclipse-pom编辑730
  • 31. 使用m2eclipse-pom编辑831
  • 32. 使用m2eclipse-pom编辑932
  • 33. 使用m2eclipse-pom编辑1033
  • 34. 使用Maven2- sample viss project移植ViSS中PAS、CSG、AS、License等模块maven2项目(基于2.10.X) svn url http://10.30.10.22/svn/ViSS/java-server/trunk/maven2/viss hudson url http://10.30.10.21:8080/hudson/ 项目站点url http://10.30.10.21:8081/projects/viss/34
  • 35. 使用Maven2- sample viss project内部仓库服务器 company,可下载外面构件, 代理内部请求 Public release:代理外部仓库服务器 http://10.30.11.103:9091/nexus/content/groups/public/ Public snapshot:代理外部snapshot仓库服务器; http://10.30.11.103:9091/nexus/content/groups/public-snapshots/ viss,内部发布构件服务器,对外请求指向company Public release:代理company release,company snapshot及内部所有发布的版本; http://10.30.10.21:9091/nexus/content/groups/public/ Releases:内部发布release http://10.30.10.21:9091/nexus/content/repositories/releases/ Snapshots:内部发布snapshot http://10.30.10.21:9091/nexus/content/repositories/snapshots/ 3rdpartys:内部发布第三方库 http://10.30.10.21:9091/nexus/content/repositories/thirdparty/ 注:如需发布到viss仓库服务器,需要申请账号 35
  • 36. 使用Maven2- import viss-step1Step1:选择maven checkout 向导36
  • 37. 使用Maven2- import viss-step2Step2:选择svn及输入viss svn url 注:如只想导入viss下子项目,则url 输入相应子项目的svn url37
  • 38. 使用Maven2- import viss-step3Step3: 后续按next,使用缺省值到finish结束 如果初次使用maven2,可能要等较长时间38
  • 39. 使用Maven2- 项目结构介绍39
  • 40. 使用Maven2- visspackaging:pom 通过modules集成子项目 缺省在viss中执行的命令会自动扩展到子项目中 40
  • 41. 使用Maven2- viss-parentpackaging:pom viss项目的父项目,所有子项目都继承该项目中定义的信息,包括: 构件依赖管理dependencyManagement 插件依赖管理pluginManagement Reporting设置 其他如scm,ci组织、开发者等等 41
  • 42. 使用Maven2- viss-commonpackaging:pom 用于项目间共享和重用的集成项目 viss-common-assembly 用于assembly插件使用的打包定制项目,包括bin和web 2种打包结构 bin:参考viss-license-generator项目打包 web:参考viss-csg or viss-as-web等打包格式 42
  • 43. 使用Maven2- viss webpackaging:pom packaging:war viss-as/viss-pas core packaging: jar web packagin: war 上述都是web项目 csg是将src/main目录下java和resources直接打包成jar文件; as/pas则是将该jar文件作为一个core项目,web项目依赖该core文件;43
  • 44. 使用Maven2- viss-licenseviss-license-validator viss-license-generator viss-license-viewer validator是个jar项目,可被其他如as及generator等项目依赖使用; generator和viewer也是个jar项目,使用bin打包44
  • 45. 使用Maven2- viss 使用总结1JDK1.5编译,参见compiler插件配置 UTF-8编码,参见project.build.sourceEncoding定义 第三方库,通过viss-parent统一管理定义 本地测试时,请配置本地环境属性变量 site.deploy.url,如file:E:\Apache2.2\htdocs Jdbc.host,如localhost:1521 Site报告包含了pmd,checkstyle,findbugs,cobertura等统计结果,发布版本前请检查结果; 缺省main和test的resources下所有*.properties启用过滤 assembly打包设置 skipWebAssembly:是否采用web打包格式; skipBinAssembly:是否采用bin打包格式;45
  • 46. 使用Maven2- viss 使用总结2测试分unit/integration/functional3级别 Unit:**/unit/**/*Test.java, test phase自动执行,参见surefire插件配置 Integration: **/integation/**/*Test.java,test phase执行,需激活integration profile Functional: **/functional/**/*Test.java,integration-test执行,需激活functional profile web项目 webAppContext:定义url应用上下文,如/viss tomcatManagerXXX:定义tomcat deploy环境,缺省tomcat5,参见cargo插件配置; 和hudson集成46
  • 47. 总结使用maven2好处 统一标准化的项目结构和管理 强大的依赖管理 项目信息报告 促进模块化设计及重用代码 容易创建项目及方便使用47
  • 48. 参考文献Maven home http://maven.apache.org/ Maven2 插件项目 http://mojo.codehaus.org/ Maven: The Definitive Guide http://www.sonatype.com/products/maven/documentation/book-defguide Maven2安装包及资料 \\10.30.10.21\tools\maven48
  • 49. 谢 谢 !www.zxelec.com49