More Related Content Similar to Maven初级培训 (20) Maven初级培训2. 培训目标
• 新接触的同学
• 了解 maven 的常见使用场景
• 有使用经验的同学
• 了解部分原理
• 掌握某些高级使用技巧
• 熟悉常见问题的原因和解决办法
3. 培训安排
• 何为 Maven?
– 构建,依赖管理,项目信息聚合
• Maven 核心概念
– pom ,坐标,依赖,仓库,生命周期,插件
• Maven 最佳实践
– 继承,多模块,测试
• M2eclipse
4. 何为 maven ?
答案 1 :构建工具
思考这个问题:软件开发的流程中涉及到哪些活动?
创建 编译 测试 报告 打包 部署
其他同类有:
•IDE (优点:智能化,快速开发。缺点:难统一)
•Shell
•Make
•Ant
5. Maven 与 ant 的区别
• Apache Ant
• Ant 没有正式的约定如一个一般项目的目录结构,你必须明
确的告诉 Ant 哪里去找源代码,哪里放置输出。随着时间的
推移,非正式的约定出现了,但是它们还没有在产品中模式
化。
• Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候
做。你必须告诉它去编译,然后复制,然后压缩。
• Ant 没有生命周期,你必须定义目标和目标之间的依赖。你
必须手工为每个目标附上一个任务序列。
6. Maven 与 ant 的区别
• Apache Maven
• Maven 拥有约定,因为你遵循了约定,它已经知道你的源代
码在哪里。它把字节码放到 target/classes ,然后
在 target 生成一个 JAR 文件。
• Maven 是声明式的。你需要做的只是创建一个 pom.xml 文
件然后将源代码放到默认的目录。 Maven 会帮你处理其它
的事情。
• Maven 有一个生命周期,当你运行 mvn install 的时候被调
用。这条命令告诉 Maven 执行一系列的有序的步骤,直到
到达你指定的生命周期。遍历生命周期旅途中的一个影响就
是, Maven 运行了许多默认的插件目标,这些目标完成了像
编译和创建一个 JAR 文件这样的工作
7. 何为 maven ?
答案 2 :依赖管理工具
思考这个问题:淘宝的各个系统之间是怎样依赖的?
log4j:log4j:1.2.15
log4j
itest com.taobao.test:itest:1.0
org.springframework:spring‐core:2.5
spring …
…
8. 何为 maven ?
答案 3 :项目信息聚合
* 版本控制系统信息,缺陷跟踪系统信息,开发者
信息,许可证信息……
* 项目站点: javadoc ,测试覆盖,代码静态分析报
告……
10. 常用命令演示
• 创建工程:
mvn archetype:create -DgroupId=com.taobao.test
-DartifactId=mavenDemo
• 生成 eclipse 可识别的工程:
mvn eclipse:eclipse
更好的方式: mvn eclipse:clean eclipse:eclipse –
DdownloadSources=true –DdownloadJavadocs=true
11. 认识 POM
A simple pom
<project ….>
<modelVersion>4.0.0</modelVersion>
<groupId>com.taobao.test</groupId>
<artifactId>mavenDemo</artifactId>
坐标
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>mavenDemo</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId> 依赖
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
12. 坐标
• groupId : com.taobao.test
• artifactId : mavenDemo
• version : 1.0-SNAPSHOT(1.0 、 2.0-SNAPSHOT…)
• packaging : jar ( war… )
• Example:
– com/taobao/test/itest/1.0/itest-1.0.jar
15. 依赖传递(重要)
A 依赖 B , B 又依赖 C ,那么 A 将默认依赖 C ,而
不需要在 pom 里 显式的写明依赖
Example :
XXTest itest junit
当你的测试工程,需要 itest 的时候,你只需要依赖
itest ,而不需要关心 itest 依赖什么,依赖传递帮你搞
定一切
16. 依赖传递(重要)
常见问题:
版本冲突
解决办法:
依赖分析: mvn dependency:tree 或者使用 m2eclipse 插
件
排除传递依赖
<dependency>
<groupId>com.taobao.test</groupId>
<artifactId>itest</artifactId>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
<version>1.0</version>
</dependency>
20. Maven 插件
• Maven 本身是一个框架,实际的任务都由插件
完成
• 插件与生命周期阶段绑定,用户通过指定生命
maven-surefire-plugin
周期阶段就能够隐式的通过插件执行任务
– 如: mvn clean test
– 会自动通过 maven-clean-plugin 来执行清理操作
– 会自动通过 maven-surefire-plugin 来执行测试
• 插件需要在 pom 中配置,但缺省的 Super POM
中已经配置了一些插件
26. 公司级别 POM
•维护一个公司(组织)级别的 POM ,供所有项目继承
•固定常用插件版本
•固定常用插件配置,如 maven‐compiler‐plugin 支持
java 1.5
•现在公司的 pom
<parent>
<groupId>com.taobao</groupId>
<artifactId>parent</artifactId>
<version>1.0.1</version>
</parent>
29. 测试
•测试用的插件:
maven-surefire-plugin
•唯一的目标 surefire:test 与生命周期阶段 test 绑定
•测试报告: ${basedir}/target/surefire-reports
•默认运行的测试类:
**/Test*.java
**/*Test.java
**/*TestCase.java
•包含和排除测试
30. 测试
•跳过测试
•Mvn test -DskipTests
•Mvn test -Dmaven.test.skip=true( 同时跳过编译测
试)
•单独运行测试 (Hudson 重新运行失败用例插件的原
理)
•Mvn test -Dtest=ATest
•Mvn test -Dtest=A*Test
•Mvn test -Dtest=ATest,Btest
•Install 过程中忽略测试失败
•Mvn install –Dmaven.test.failure.ignore=true
33. 参考文档
•参考文档:
•淘宝 maven 培训 by Juven Xu
•推荐资料
•10.1.6.139 软件备份 接口测试学习指南 接
口测试入门资料( java ) 接口测试新人指南
( java ) 参考学习文档 maven
Editor's Notes Use your textbook or the following websites to find the definitions for these two words... Use your textbook or the following websites to find the definitions for these two words... Use your textbook or the following websites to find the definitions for these two words... Use your textbook or the following websites to find the definitions for these two words...