SlideShare a Scribd company logo
1 of 35
Maven 培训

    written by 七修
培训目标
• 新接触的同学
  • 了解 maven 的常见使用场景
• 有使用经验的同学
  • 了解部分原理
  • 掌握某些高级使用技巧
  • 熟悉常见问题的原因和解决办法
培训安排
• 何为 Maven?
  – 构建,依赖管理,项目信息聚合
• Maven 核心概念
  – pom ,坐标,依赖,仓库,生命周期,插件
• Maven 最佳实践
  – 继承,多模块,测试
• M2eclipse
何为 maven ?
答案 1 :构建工具
思考这个问题:软件开发的流程中涉及到哪些活动?

创建   编译    测试   报告   打包   部署



其他同类有:
  •IDE (优点:智能化,快速开发。缺点:难统一)
  •Shell
  •Make
  •Ant
Maven 与 ant 的区别
• Apache Ant
• Ant 没有正式的约定如一个一般项目的目录结构,你必须明
  确的告诉 Ant 哪里去找源代码,哪里放置输出。随着时间的
  推移,非正式的约定出现了,但是它们还没有在产品中模式
  化。
• Ant 是程序化的,你必须明确的告诉 Ant 做什么,什么时候
  做。你必须告诉它去编译,然后复制,然后压缩。
• Ant 没有生命周期,你必须定义目标和目标之间的依赖。你
  必须手工为每个目标附上一个任务序列。
Maven 与 ant 的区别
• Apache Maven
• Maven 拥有约定,因为你遵循了约定,它已经知道你的源代
  码在哪里。它把字节码放到  target/classes ,然后
  在  target 生成一个  JAR 文件。
• Maven 是声明式的。你需要做的只是创建一个  pom.xml 文
  件然后将源代码放到默认的目录。 Maven 会帮你处理其它
  的事情。
• Maven 有一个生命周期,当你运行  mvn install 的时候被调
  用。这条命令告诉 Maven 执行一系列的有序的步骤,直到
  到达你指定的生命周期。遍历生命周期旅途中的一个影响就
  是, Maven 运行了许多默认的插件目标,这些目标完成了像
  编译和创建一个  JAR 文件这样的工作
何为 maven ?
 答案 2 :依赖管理工具
 思考这个问题:淘宝的各个系统之间是怎样依赖的?



                                  log4j:log4j:1.2.15
 log4j
             itest            com.taobao.test:itest:1.0

                         org.springframework:spring‐core:2.5
spring         …

         …
何为 maven ?
答案 3 :项目信息聚合
*    版本控制系统信息,缺陷跟踪系统信息,开发者
     信息,许可证信息……
*    项目站点: javadoc ,测试覆盖,代码静态分析报
     告……
安装介绍
• 下载地址: http://maven.apache.org/download.html
• 安装方法:
  – 1 、解压缩下载后的压缩包至您通常安放软件的位置
  – 2 、修改环境变量
       – 添加: M2_HOME=$ 您的解压后的位置( eg: d:/tools/apache-maven )
       – 修改 PATH :在 path 前追加 $M2_HOME$bin
  – 3 、验证
       – 打开 cmd ,输入: mvn -v ,会显示当前 maven 版本,如下:
常用命令演示
• 创建工程:
  mvn archetype:create -DgroupId=com.taobao.test
  -DartifactId=mavenDemo
• 生成 eclipse 可识别的工程:
  mvn eclipse:eclipse
  更好的方式: mvn eclipse:clean eclipse:eclipse –
  DdownloadSources=true –DdownloadJavadocs=true
认识 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>
坐标
•   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
依赖
依赖范围(重要)
依赖传递(重要)
A 依赖 B , B 又依赖 C ,那么 A 将默认依赖 C ,而
不需要在 pom 里 显式的写明依赖
Example :

 XXTest      itest      junit


当你的测试工程,需要 itest 的时候,你只需要依赖
itest ,而不需要关心 itest 依赖什么,依赖传递帮你搞
定一切
依赖传递(重要)
常见问题:
   版本冲突
解决办法:
   依赖分析: 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>
仓库




* 默认的,本地所 Maven 项目都复用一个本地仓库
* 本地仓库从远程仓库(可配置)下载必要的构件
* 中央仓库是唯一内置的远程仓库
Setting.xml
•文件位置: %MAVEN_HOME%/conf/setting.xml
•更改本地仓库地址
  •<localRepository>d:repo</localRepository>
生命周期




* 三套生命周期( clean, default, site )相互独立
* 一套生命周期中,生命周期阶段前后依赖
* mvn 命令指向生命周期阶段
Maven 插件
• Maven 本身是一个框架,实际的任务都由插件
  完成
• 插件与生命周期阶段绑定,用户通过指定生命
            maven-surefire-plugin
  周期阶段就能够隐式的通过插件执行任务
  – 如: mvn clean test
        – 会自动通过 maven-clean-plugin 来执行清理操作
        – 会自动通过 maven-surefire-plugin 来执行测试

• 插件需要在 pom 中配置,但缺省的 Super POM
  中已经配置了一些插件
Maven 最佳实践
• 继承
• 多模块
• 使用 maven 运行测试
多模块和继承
继承
继承
可继承的元素
*groupId, artifactId, version. (groupId/artifactId 之一必须重
写)
* dependencies
* plugins
* dependencyManagement
* pluginManagement
* Reporting
* Developers & Contributors
* 子模块可任意重写父模块配置
Super POM
公司级别 POM
•维护一个公司(组织)级别的 POM ,供所有项目继承
•固定常用插件版本
•固定常用插件配置,如 maven‐compiler‐plugin 支持
 java 1.5
•现在公司的 pom
  <parent>
     <groupId>com.taobao</groupId>
     <artifactId>parent</artifactId>
     <version>1.0.1</version>
  </parent>
多模块
多模块 & 继承

Demo 演示
测试
•测试用的插件:
    maven-surefire-plugin
•唯一的目标 surefire:test 与生命周期阶段 test 绑定
•测试报告: ${basedir}/target/surefire-reports
•默认运行的测试类:
    **/Test*.java
    **/*Test.java
    **/*TestCase.java
•包含和排除测试
测试
•跳过测试
    •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
测试
•Demo 演示
m2eclipse
•安装地址: http://m2eclipse.sonatype.org/sites/m2e
•修改配置:
   •Eclipse:
       点击 windowpreferencesmavenuser
   setting ,
          修改 user settings 指向你所安装的 maven 的
       setting.xml 文件
•优点 :
   •方便查找所需要依赖的包
   •自动下载
   •依赖分析
•Demo 演示
参考文档
•参考文档:
  •淘宝 maven 培训 by Juven Xu
•推荐资料
  •10.1.6.139 软件备份  接口测试学习指南  接
  口测试入门资料( java )  接口测试新人指南
  ( java )  参考学习文档 maven
Q&A
THE end

More Related Content

What's hot

Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Gelis Wu
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)beehivedata
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式Will Huang
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Jeff Chu
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formaljameslabs
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具taobao.com
 
方建国 -V mware-ha实战1
方建国 -V mware-ha实战1方建国 -V mware-ha实战1
方建国 -V mware-ha实战1landece
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Justin Lin
 
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Justin Lin
 
Leverage virtualization in software test
Leverage virtualization in software testLeverage virtualization in software test
Leverage virtualization in software testdrewz lin
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)Will Huang
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程Simon Su
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Gelis Wu
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)Jeff Chu
 
用Maven管理專案的依賴關係
用Maven管理專案的依賴關係用Maven管理專案的依賴關係
用Maven管理專案的依賴關係Huang Bruce
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践Na Lee
 
Maven in eclipse practices
Maven in eclipse practicesMaven in eclipse practices
Maven in eclipse practicesPei-Tang Huang
 

What's hot (20)

Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探Asp.net mvc 6 新功能初探
Asp.net mvc 6 新功能初探
 
Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)Honey's Data Dinner#7 webpack 包達人(入門)
Honey's Data Dinner#7 webpack 包達人(入門)
 
使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式使用 Visual Studio Code 建構 JavaScript 應用程式
使用 Visual Studio Code 建構 JavaScript 應用程式
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
Jmeter
Jmeter Jmeter
Jmeter
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
PHPUnit slide formal
PHPUnit slide formalPHPUnit slide formal
PHPUnit slide formal
 
钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具钱宝坤:多浏览器集成的JavaScript单元测试工具
钱宝坤:多浏览器集成的JavaScript单元测试工具
 
方建国 -V mware-ha实战1
方建国 -V mware-ha实战1方建国 -V mware-ha实战1
方建国 -V mware-ha实战1
 
Ch10 Web 容器安全管理
Ch10 Web 容器安全管理Ch10 Web 容器安全管理
Ch10 Web 容器安全管理
 
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
Servlet & JSP 教學手冊第二版 - 第 10 章:Web 容器安全管理
 
Leverage virtualization in software test
Leverage virtualization in software testLeverage virtualization in software test
Leverage virtualization in software test
 
快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)快速上手 Windows Containers 容器技術 (Docker Taipei)
快速上手 Windows Containers 容器技術 (Docker Taipei)
 
Node.js從無到有 基本課程
Node.js從無到有 基本課程Node.js從無到有 基本課程
Node.js從無到有 基本課程
 
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
twMVC#26 | 淺談 ASP.NET Caching 技術與實踐
 
Asp.net 5 新功能與變革
Asp.net 5 新功能與變革Asp.net 5 新功能與變革
Asp.net 5 新功能與變革
 
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
ASP.NET 5 快速入門 (Getting Started ASP.NET 5)
 
用Maven管理專案的依賴關係
用Maven管理專案的依賴關係用Maven管理專案的依賴關係
用Maven管理專案的依賴關係
 
02.python.开发最佳实践
02.python.开发最佳实践02.python.开发最佳实践
02.python.开发最佳实践
 
Maven in eclipse practices
Maven in eclipse practicesMaven in eclipse practices
Maven in eclipse practices
 

Viewers also liked

Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012
Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012
Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012INPUT 2012
 
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter snhewage
 
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 Valls
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 VallsICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 Valls
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 VallsRicard Espelt
 
Ementa 28 Maio a 01 Junho Berçário
Ementa 28 Maio a 01 Junho BerçárioEmenta 28 Maio a 01 Junho Berçário
Ementa 28 Maio a 01 Junho Berçáriosalabrancadeneve
 
ආචාර්ය සුජිත් නිශාන්ත හේවගේ
ආචාර්ය සුජිත් නිශාන්ත හේවගේආචාර්ය සුජිත් නිශාන්ත හේවගේ
ආචාර්ය සුජිත් නිශාන්ත හේවගේsnhewage
 
I Encontro de Portos da CPLP - Apresentação do Porto de Aveiro
I Encontro de Portos da CPLP - Apresentação do Porto de AveiroI Encontro de Portos da CPLP - Apresentação do Porto de Aveiro
I Encontro de Portos da CPLP - Apresentação do Porto de Aveiroaplop
 
Invitacionbarbacoafindesemana
InvitacionbarbacoafindesemanaInvitacionbarbacoafindesemana
InvitacionbarbacoafindesemanaTigre Rossi
 
21 05-12 1è
21 05-12 1è21 05-12 1è
21 05-12 1èmalvar85
 
Pasapalabra gastroenteritis.
Pasapalabra gastroenteritis.Pasapalabra gastroenteritis.
Pasapalabra gastroenteritis.DOSCOSITOS
 
Excel lesson 8 and student survey
Excel lesson 8 and student surveyExcel lesson 8 and student survey
Excel lesson 8 and student surveycxd051
 
Eso programació antonio_portfoli
Eso programació antonio_portfoliEso programació antonio_portfoli
Eso programació antonio_portfolialfa6
 

Viewers also liked (20)

Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012
Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012
Paolillo, Benedetti, Graj, Terlizzi & Bisceglie - input2012
 
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter
ආචාර්ය සුජිත් නිශාන්ත හේවගේ Buddhist values 3.chapter
 
Presi
PresiPresi
Presi
 
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 Valls
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 VallsICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 Valls
ICT4RD: Què poden aportar les TIC en el sector agrorural. 25.05.2012 Valls
 
CMS Website Development
CMS Website DevelopmentCMS Website Development
CMS Website Development
 
Ementa 28 Maio a 01 Junho Berçário
Ementa 28 Maio a 01 Junho BerçárioEmenta 28 Maio a 01 Junho Berçário
Ementa 28 Maio a 01 Junho Berçário
 
130602 dentro e fora ada his teoria e met da historia
130602 dentro e fora ada his teoria e met da historia130602 dentro e fora ada his teoria e met da historia
130602 dentro e fora ada his teoria e met da historia
 
ආචාර්ය සුජිත් නිශාන්ත හේවගේ
ආචාර්ය සුජිත් නිශාන්ත හේවගේආචාර්ය සුජිත් නිශාන්ත හේවගේ
ආචාර්ය සුජිත් නිශාන්ත හේවගේ
 
Oap
OapOap
Oap
 
I Encontro de Portos da CPLP - Apresentação do Porto de Aveiro
I Encontro de Portos da CPLP - Apresentação do Porto de AveiroI Encontro de Portos da CPLP - Apresentação do Porto de Aveiro
I Encontro de Portos da CPLP - Apresentação do Porto de Aveiro
 
Windancer2003
Windancer2003Windancer2003
Windancer2003
 
Invitacionbarbacoafindesemana
InvitacionbarbacoafindesemanaInvitacionbarbacoafindesemana
Invitacionbarbacoafindesemana
 
Tik
TikTik
Tik
 
21 05-12 1è
21 05-12 1è21 05-12 1è
21 05-12 1è
 
Wsus
WsusWsus
Wsus
 
Pasapalabra gastroenteritis.
Pasapalabra gastroenteritis.Pasapalabra gastroenteritis.
Pasapalabra gastroenteritis.
 
Excel lesson 8 and student survey
Excel lesson 8 and student surveyExcel lesson 8 and student survey
Excel lesson 8 and student survey
 
Beethoven
BeethovenBeethoven
Beethoven
 
El rectángulo. encarni amaro
El rectángulo. encarni amaroEl rectángulo. encarni amaro
El rectángulo. encarni amaro
 
Eso programació antonio_portfoli
Eso programació antonio_portfoliEso programació antonio_portfoli
Eso programació antonio_portfoli
 

Similar to Maven初级培训

Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程kangzj
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例YC Ling
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探Anson Yang
 
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting祺元 曾
 
Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Tony Deng
 
Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Tony Deng
 
项目自动化实施
项目自动化实施项目自动化实施
项目自动化实施dhlzj
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定Shengyou Fan
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定Shengyou Fan
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdfbj_qa
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍Tianwei Liu
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩Wen-Tien Chang
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)xzdbd
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2netdbncku
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训Wu Liang
 
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用webspherelittlecong
 

Similar to Maven初级培训 (20)

Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程Maven私服安装,Maven使用教程
Maven私服安装,Maven使用教程
 
[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例[OSDC12]相依性管理 - 以Ruby開發為例
[OSDC12]相依性管理 - 以Ruby開發為例
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探
 
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
 
Maven & mongo & sring
Maven & mongo & sringMaven & mongo & sring
Maven & mongo & sring
 
Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Maven的简单介绍及基本应用
Maven的简单介绍及基本应用
 
Maven的简单介绍及基本应用
Maven的简单介绍及基本应用Maven的简单介绍及基本应用
Maven的简单介绍及基本应用
 
项目自动化实施
项目自动化实施项目自动化实施
项目自动化实施
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
啟動 Laravel 與環境設定
啟動 Laravel 與環境設定啟動 Laravel 與環境設定
啟動 Laravel 與環境設定
 
广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf广告技术部自动化测试介绍.pdf
广告技术部自动化测试介绍.pdf
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
DAE 新变化介绍
DAE 新变化介绍DAE 新变化介绍
DAE 新变化介绍
 
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
A brief introduction to Vagrant – 原來 VirtualBox 可以這樣玩
 
Java 1(Java概述)
Java 1(Java概述)Java 1(Java概述)
Java 1(Java概述)
 
Foundation of software development 2
Foundation of software development 2Foundation of software development 2
Foundation of software development 2
 
Bst svn专项培训
Bst svn专项培训Bst svn专项培训
Bst svn专项培训
 
PHPUnit
PHPUnitPHPUnit
PHPUnit
 
02.web sphere培训 应用websphere
02.web sphere培训 应用websphere02.web sphere培训 应用websphere
02.web sphere培训 应用websphere
 

Maven初级培训

  • 1. Maven 培训 written by 七修
  • 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 ,测试覆盖,代码静态分析报 告……
  • 9. 安装介绍 • 下载地址: http://maven.apache.org/download.html • 安装方法: – 1 、解压缩下载后的压缩包至您通常安放软件的位置 – 2 、修改环境变量 – 添加: M2_HOME=$ 您的解压后的位置( eg: d:/tools/apache-maven ) – 修改 PATH :在 path 前追加 $M2_HOME$bin – 3 、验证 – 打开 cmd ,输入: mvn -v ,会显示当前 maven 版本,如下:
  • 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>
  • 17. 仓库 * 默认的,本地所 Maven 项目都复用一个本地仓库 * 本地仓库从远程仓库(可配置)下载必要的构件 * 中央仓库是唯一内置的远程仓库
  • 19. 生命周期 * 三套生命周期( clean, default, site )相互独立 * 一套生命周期中,生命周期阶段前后依赖 * mvn 命令指向生命周期阶段
  • 20. Maven 插件 • Maven 本身是一个框架,实际的任务都由插件 完成 • 插件与生命周期阶段绑定,用户通过指定生命 maven-surefire-plugin 周期阶段就能够隐式的通过插件执行任务 – 如: mvn clean test – 会自动通过 maven-clean-plugin 来执行清理操作 – 会自动通过 maven-surefire-plugin 来执行测试 • 插件需要在 pom 中配置,但缺省的 Super POM 中已经配置了一些插件
  • 21. Maven 最佳实践 • 继承 • 多模块 • 使用 maven 运行测试
  • 24. 继承 可继承的元素 *groupId, artifactId, version. (groupId/artifactId 之一必须重 写) * dependencies * plugins * dependencyManagement * pluginManagement * Reporting * Developers & Contributors * 子模块可任意重写父模块配置
  • 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
  • 32. m2eclipse •安装地址: http://m2eclipse.sonatype.org/sites/m2e •修改配置: •Eclipse: 点击 windowpreferencesmavenuser setting , 修改 user settings 指向你所安装的 maven 的 setting.xml 文件 •优点 : •方便查找所需要依赖的包 •自动下载 •依赖分析 •Demo 演示
  • 33. 参考文档 •参考文档: •淘宝 maven 培训 by Juven Xu •推荐资料 •10.1.6.139 软件备份 接口测试学习指南 接 口测试入门资料( java ) 接口测试新人指南 ( java ) 参考学习文档 maven
  • 34. Q&A

Editor's Notes

  1. Use your textbook or the following websites to find the definitions for these two words...    
  2. Use your textbook or the following websites to find the definitions for these two words...    
  3. Use your textbook or the following websites to find the definitions for these two words...    
  4. Use your textbook or the following websites to find the definitions for these two words...