• 1. Maven技术分享李方虎 Email:wslfh2005@163.com 微博:http://weibo.com/hurtigf 博客:http://www.lifanghu.com/
  • 2. 讲述目录Maven是什么? Maven怎么用? Maven高级特性 Maven与Nexus Maven与hudson
  • 3. Maven是什么?Maven是一个项目管理工具 一个更正式的 Apache Maven1的定义: Maven是一个项目管理工具,它包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。 当你使用Maven的时候,你用一个明确定义的项目对象模型来描述你的项目,然后 Maven 可以应用横切的逻辑,这些逻辑来自一组共享的(或者自定义的)插件。
  • 4. Maven能做什么?对第三方依赖库进行统一的版本管理。 统一项目的目录结构。 统一软件构建阶段 支持多种插件 自动生成项目网站和报表
  • 5. same information same place
  • 6. Maven设计原则Convention Over Configuration (约定优于配置) 在现实生活中,有很多常识性的东西,地球人都知道。比如说:如何过马路(红灯停绿灯行),如何开门,关门等。对于这些事情,人们已经有了默认的约定。
  • 7. Maven与AntAnt面向过程,Maven面向对象。 Ant没有约定,Maven拥有约定。 Ant是程序化的,Maven是声明式的。 Ant没有生命周期,Maven有一个生命周期。
  • 8. Maven怎么用?Maven安装安装JDK 下载Maven3.0.1http://maven.apache.org/ 解压Maven到某一路径 设置环境变量 验证Maven安装,运行mvn –v
  • 9. 创建一个简单项目命令 运行:mvn archetype:create -DgroupId=com.ligitalsoft -DartifactId=MyProject -DpackageName=com.ligitalsoft.dao
  • 10. 4.0.0 com.ligitalsoft MyProject 1.0-SNAPSHOT jar MyProject http://maven.apache.org UTF-8 junit junit 3.8.1 test
  • 11. 构建进入MyProject目录 运行:mvn package
  • 12. Maven核心概念Maven插件和目标(Plugins and Goals) 一个Maven插件是一个单个或者多个目标的集合。一个目标是一个明确的任务,它可以作为单独的目标运行,或者作为一个大的构 建的一部分和其它目标一起运行。如:archetype:create, compiler:compile, compiler:testCompile等。
  • 13. Maven核心概念Maven生命周期(Lifecycle) 生命周期是包含在一个项目构建中的一系列有序的阶段。 插件目标可以附着在生命周期阶段上。
  • 14. Maven核心概念Maven坐标 (Coordinates) Maven坐标定义了一组标识,它们可以用来唯一标识一个项目,一个依赖,或者Maven POM里的一个插件。
  • 15. Maven核心概念Maven仓库(Repositories) Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repo1.maven.org/maven2)Maven仓库是通过结构来定义的, 一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,它们的格式能很容易的被Maven所理解。在一个Maven仓库中,所有的东西存储在一个与Maven项目坐标十分匹配的目录结构中。本地仓库
  • 16. Maven核心概念Maven依赖管理 (Dependency Management) 一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。这是Maven最强大的特征之一,它支持了传递性依赖(transitive dependencies)。假如你的项目依赖于一个库,而这个库又依赖于五个或者十个其它的库(就像Spring或者Hibernate那样)。你不必找出所有这些依赖然后把它们写在你的pom.xml里,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或者排除一些特定的传递性依赖。
  • 17. Maven核心概念站点生成和报告 (Site Generation and Reporting) 命令:mvn site 它能生成文档和报告。
  • 18. 实际的多模块web项目以目录体系为例,探讨分模块开发方式。模块结构图公共模块,放置公司公用的类核心业务类,放置本系统核心业务类顶级POM配置,其它模块以它为父主要放置系统运行时的配置信息和JAVA类项目最外层POM,主要定义模块
  • 19. 实际的多模块web项目模块依赖关系图 单向依赖parentcommoncoreweb-webappdeploy-local继承依赖
  • 20. 实际的多模块web项目常用打包类型 JAR,打包成一个JAR包,如模块common,core
  • 21. 实际的多模块web项目常用打包类型 POM是最简单的打包类型。不像一个JAR,SAR,或者EAR,它生成的构件只是它本身。没有代码需要测试或者编译,也没有资源需要处理。如模块parent和项目顶级POM。其中parent模块主要定义项目依赖和版本,主要仓库地址,插件配置等工作,一般一个公司有一个这样的配置文件就可以了。
  • 22. 实际的多模块web项目常用打包类型 war:打成war包,注意war:war插件需要一个web.xml配置文件在项目的src/main/webapp/WEB-INF目录中。如模块web-webapp
  • 23. 实际的多模块web项目进行项目构建 命令:mvn clean package
  • 24. Maven与Nexus
  • 25. Maven与NexusNexus是什么? 它是Maven仓库管理器,一般来说一个公司要建立这么一个代理服务器,用来缓存远程服务器的资源。Maven中央仓库 jboss仓库 公司代理仓库 本地仓库A …..本地仓库B 远程仓库获取获取获取本地计算机
  • 26. Maven与NexusNexus仓库类型 代理仓库:一个代理仓库是对远程仓库的一个代理。如Apache Snapshots,Maven Central 宿主仓库 :一个宿主仓库是由Nexus托管的仓库。3rd Party  这个宿主仓库应该用来存储在公共Maven仓库中找不到的第三方依赖。这种依赖的样例有:你组织使用的,商业的,私有的类库如Oracle JDBC驱动。  Releases  这个宿主仓库是你组织公布内部发布版本的地方。  Snapshots  这个宿主仓库是你组织发布内部快照版本的地方。  虚拟仓库 :一个虚拟仓库作为Maven 1的适配器存在。Nexus自带了一个central-m1虚拟仓库  管理组 组是Nexus的特性,它允许你在一个单独的URL中组合多个仓库。
  • 27. Maven与NexusMaven使用Nexus 本地可以配置在C:\Documents and Settings\Administrator\.m2下修改settings.xml,加入中央仓库的代理URL
  • 28. Maven与NexusMaven使用Nexus 项目中配置在pom.xml里面,如模块parent配置 当项目开发完成后可以执行mvn deploy将构建发布到nexus上供其它项目依赖使用。开发过程中可以执行mvn deploy将快照发布上去
  • 29. Maven与hudson
  • 30. Maven与hudsonHudson是什么? Hudson 是一个可扩展的持续集成引擎,即CI服务器。 作用 1.持续、自动地构建/测试软件项目。 2.监控一些定时执行的任务。
  • 31. Maven与hudson优点 易于安装-只要把hudson.war部署到servlet容器,不需要数据库支持。 易于配置-所有配置都是通过其提供的web界面实现。 集成RSS/E-mail/IM-通过RSS发布构建结果或当构建失败时通过e-mail实时通知。 生成JUnit/TestNG测试报告。 分布式构建支持-Hudson能够让多台计算机一起构建/测试。 文件识别- Hudson能够跟踪哪次构建生成哪些jar,哪次构建使用哪个版本的jar等。 插件支持-Hudson可以通过插件扩展,你可以开发适合自己团队使用的工具。
  • 32. Maven与hudson系统管理-增加Maven支持
  • 33. Maven与hudson新建任务
  • 34. Maven与hudson配置SVN地址
  • 35. Maven与hudson任务列表
  • 36. Maven与hudson点击 执行一次构建,可以看到命令行
  • 37. Maven与hudson
  • 38. 谢谢!!