测试之路,与你同行!

maven理论学习

上一篇 / 下一篇  2012-02-23 10:41:47 / 个人分类:java编程

1、什么是Maven

         Apache Maven是一个项目管理工具,它包含了一个项目对象模型(Project Object Model),一个标准几何,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标(goal)的逻辑。

2、什么是pom 

    pom作为项目对象模型。

基本内容:

      POM包括了所有的项目信息。

      POM定义了最小的maven2元素,允许groupId,artifactId,version等所有需要的元素;groupId,,artifactId, version:描述了依赖的项目唯一标志

  • groupId:项目或者组织的唯一标志,并且配置时生成的路径也是由此生成,如com.taobao.cmp生成的相对路径为:/com/taobao/cmp
  • artifactId:groupId下的表示一个单独项目的唯一标识符,默认为jar
  • version:项目的版本
  • packaging:打包的机制,如pom, jar, maven-plugin, ejb, war, ear, rar, par

 

<groupId>com.taobao.XXXtest</groupId>

   <artifactId>XXX-qatest</artifactId>

   <version>1.0.0</version>

   <packaging>jar</packaging>

3POM中的关系: 

主要为依赖,合成,继承

3.1依赖关系(dependencies相关): 

Maven提供传递依赖:

A->B  B->C  C->D   则 A依赖D;

A->B->D1.0  A->D2.0 则 A依赖D2.0

A->E1.0  A->E2.0    则 A依赖E1.0

这种依赖方式遵循的原则:最近原则、最先原则(since maven 2.0.9)。

<dependencies>

    <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>${junit.version}</version>

   </dependency>

</dependencies>

3.1.1依赖的范围(scope 

compile(缺省值 ),test,runtime,provided;

依赖范围(scope)主源码classpath可用测试源码classpath可用会被打包
compile 缺省值TRUETRUETRUE
testFALSETRUEFALSE
runtimeFALSETRUETRUE
providedTRUETRUEFALSE

 

 

 

 

 

Junit包一般来说只有在运行测试的时候需要它,对上一个例子进行改进:

<dependencies>

    <dependency>

         <groupId>junit</groupId>

         <artifactId>junit</artifactId>

         <version>${junit.version}</version>

         <scope>test</scope>

   </dependency>

</dependencies>

再举个例子,在开发javaee应用的时候一定会用到servlet-api,它对于主源码和测试源码都是必要的,因为我们的代码中会引入servlet-api的包。但是,在打包的时候,将其放入WAR包就会有问题,因为web容器会提供servlet-api,如果我们再将其打包就会造成依赖冲突,解决方案如下:

<dependency>  

  <groupId>javax.servlet</groupId>  

  <artifactId>servlet-api</artifactId>  

  <version>2.4</version>  

  <scope>provided</scope>  

</dependency>

3.1.2依赖归类 

随着项目的增大,依赖越来越多。例如依赖了很多spring的jar:org.springframework:spring;org.springframework:spring-mock;org.springframework: spring-aspects,它们的groupId是相同的,artifactId不同,为了管理其版本,可以采用下面这种方式

<dependencies>

<dependency>

              <groupId>org.springframework</groupId>

              <artifactId>spring</artifactId>

              <version>${spring.version}</version>

           </dependency>

           <dependency>

              <groupId>org.springframework</groupId>

              <artifactId>spring-mock</artifactId>

              <version>${spring.version}</version>

              <scope>test</scope>

           </dependency>

           <dependency>

              <groupId>org.springframework</groupId>

              <artifactId>spring-aspects</artifactId>

              <version>${spring.version}</version>

           </dependency>

</dependencies>

<properties>  

            <spring.version>2.0.7</spring.version>  

</properties> 

TAG:

 

评分:0

我来说两句

日历

« 2024-04-29  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 49169
  • 日志数: 90
  • 图片数: 1
  • 建立时间: 2008-08-02
  • 更新时间: 2012-05-16

RSS订阅

Open Toolbar