• 1. Maven 使用简介穆彦利
  • 2. 安装和使用
  • 3. What?Why?Maven是什么? 一个项目管理工具 有build、test、依赖管理等功能的项目管理工具 我们为什么使用maven? 对jar包的依赖管理是个很好的东西? 使用简单,因为有继承概念
  • 4. 安装1、下载maven2.0.8(地址:http://maven.apache.org/download.html) 2、安装maven 1)解压缩maven到硬盘 2)设置环境变量,M2_HOME指向maven的主目录,PATH里面加入maven的bin目录。 3、测试maven安装 1)用下面的命令应该可以看到maven的版本号 mvn --version 2)用下面的命令应该可以看到mvn在下载文件 mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app (下面的与maven的安装无关,与我们团队开发方式有益) 4、将setting.xml文件放在“Mave安装目录\conf”下。 5、为了使eclipse能找到maven仓库里面的jar包,需做如下操作: 在eclipse上依次点:windows-->preferences-->java-->build path-->classpath variables 新建一个classpath variables命名问M2_REPO,指向“\.m2\repository”
  • 5. 如何开始创建一个项目(主要是生了一个标准的目录结构和pom.xml,建完全可以不用这个命令—就像你知道maven以前那样建就可以了) ,命令行键入: mvn archetype:create -DgroupId=com.mycompany.app -DartifactId=my-app 把你这个工程用到的jar包,写到pom.xml文件中,格式如下: org.springframework spring 2.5 --> 导入到eclipse下进行编码: mvn eclipse:eclipse:建立eclipse工程,运行这个命令之后,可以用eclipse的import功能建立一个project了 用eclipse的导入功能导入到eclipse里面 工程建立完成了,现在你可以编码了
  • 6. 开始之后还可以做什么?mvn compile: 编译java文件 mvn test: 运行单元测试 mvn package: 打包文件 mvn test-compile: 编译单元测试文件 mvn clean: 清除编译文件等 mvn eclipse:elipse:不只在建立工程的时候可以用哦,建立之后,如果你修改了项目的依赖关系,你也可以用这个命令来刷新依赖 mvn dependency:copy-dependenies:将依赖的jar复制到一起,便于我们知道这个项目都依赖了哪些jar 注意: 1、运行这些命令不需要配置任何文件 2、这些命令都可以单独执行,不需要顺序执行(test的前提是compile,但你运行mvn test的时候,不必先运行mvn compile)
  • 7. 我们团队怎样使用?工程有团队中的一个人好放到cvs上,主要工作是配置pom.xml(一个人做就可以了,绝大部分人不需要这个这项工作) 大家从cvs上下载工程,然后运行mvn eclipse:eclipse,然后导入到eclipse成为eclipse下的一个项目,这样就可以开发了 大家在开发过程中,可以用mvn test进行测试,这个命令可以一次运行所有的单元测试。
  • 8. 给我们团队带来哪些好处?CVS上不用存jar包了,工程便小了—JAR保持到maven的仓库下了 大家的机器上的jar包少了,只是同样的jar包只保存一份就可以了,不用像以前那样每个工程都保存一份 大家建立新项目简单了,当我们的项目间有依赖关系的时候,maven管理了依赖关系 可以一个命令运行所有的单元测试了
  • 9. 可用资源http://maven.apache.org:maven主站 http://repo1.maven.org/maven2/:maven主仓库 http://mavenrepository.com/:可以查询maven核心库中的jar,已经如何配置dependency http://m2eclipse.codehaus.org/update/:eclipse的插件
  • 10. 配置和管理
  • 11. 概念与思想概念: 依赖:我们的项目用到了spring,那么我们的项目对spring项目(实际上是jar包)就有依赖,我们的项目用到了jcore,那么我们的项目对jcore就有依赖,maven2的依赖是可以传递的,即A依赖于B,B依赖于C,则无需指明A自然依赖于C。 仓库:集中存储我们依赖的项目(可以简单理解成jar包)的地方 本地仓库:运行maven的机器上的仓库,仓库里面的内容是根据需要自动从远程仓库下载下来的。 远程仓库:就是仓库服务器,仓库apache提供了一个很大的仓库。 私服:即我们自己建立仓库服务器,apache离我们太远,速度无法保障,所以我们在内部网络建一个。 继承:pom.xml是可以集成的,实际上所有的pom.xml都是集成与类似与java中object类一样的一个超级pom.xml。 整合:一个项目里面可以包含很多个子项目,可以整合的方式管理起来。 思想: 以可重用的思想建立项目 用标准规范的命名和结构来简化我们的工作,这也是agile推崇的思想 项目之间是有依赖关系的,依赖是可以传递的 很多功能都可以用插件来实现
  • 12. Maven2只有两个配置文件Setting.xml 与mvn运行环境相关的配置文件,团队提供统一配置 主要配置:本地jar文件存放目录、代理服务器、本地是私服等信息。 Pom.xml 与项目相关的配置文件 项目信息,依赖管理,编译和发布管理等
  • 13. Setting.xml可以在setting.xml文件中加入下面的内容来指定你的jar的存放路径,不指定则默认到“\.m2”下 D:\JSoft\apache-maven-2.0.8\repository 我们团队会提供类似与下面的配置,来指定本地私服: local-ropository localRepository 本地仓库 http://192.168.10.128:8080/maven2
  • 14. Pom.xml最简结构(依赖是关键) 4.0.0 com.justinmobile my-app 1.0-SNAPSHOT my-webapp Maven Webapp junit junit 3.8.1
  • 15. Pom.xml的关键项:组织标识,spring用的是springframework,我们就用com.justinmobile :项目标识,如jcore的项目就叫jcore :项目的版本号 :最终产品类型,如jar,war,ear,默认是jar 本项目依赖的项目
  • 16. Dependency例子           log4j       log4j       1.2.15       jar       runtime       false                       ant-contrib           ant-contrib              
  • 17. Dependency下各元素解释* groupId, artifactId, version:描述了依赖的项目唯一标志 * type:相应的依赖产品包形式,如jar,war * scope:用于限制相应的依赖范围,包括以下的几种变量: * compile :默认范围,用于编译 * provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath * runtime:在执行时,需要使用 * test:用于test任务时使用 * system:需要外在提供相应得元素。通过systemPath来取得 * systemPath: 仅用于范围为system。提供相应的路径 * optional: 标注可选,当项目自身也是依赖时。用于连续依赖时使用 * exclusion:显示告诉maven不包括相关的依赖
  • 18. 如何继承将父项目的pom.xml写成:   4.0.0   org.codehaus.mojo   my-parent   2.0   pom 将子项目的文件中加入:       org.codehaus.mojo     my-parent     2.0     ../my-parent  
  • 19. 如何整合多个项目主项目的加入modules       my-project1     my-project2   子项目建在主项目的目录内,并根据module名字命名文件夹
  • 20. 怎样自定义目录结构?     ${basedir}/src/main/java     ${basedir}/src/test/java     ${basedir}/target/classes     ${basedir}/target/test-classes     ...
  • 21. 怎样与ANT结合使用?可以在maven里面直接写target或调用ant脚本,下面是调用ant脚本: maven-antrun-plugin deploy run
  • 22. 如何建私服找个web应用服务器就可以建了,把repository下面的内容复制进去就可以了 我们的私服如下: http://192.168.10.128:8080/maven2,我们的主私服,用apache服务器建立的 http://192.168.10.128:8080/JMRepos,我们自己项目的仓库,jcore在里面,我们有可重用的项目都应该放这里。 http://192.168.10.128:9999/repository,辅助私服,主私服上还没有的东西可以通过找个私服自动从maven的仓库服务器上更新下来
  • 23. Maven也有不足
  • 24. Maven的不足测试报告可读性差 依赖的传递性是双刃剑,其忽略依赖传递性的功能又不是很方便。 推荐规范命名是好的,但对于那些已有的没有遵循规范的项目缺乏兼容性。如:Test类。 提供了方便却使我们少了控制权,如ant可以很容易做到文件的复制,maven去要依赖ant插件去做。
  • 25. Thanks