maven使用详解

Maven简介

我们构建一个项目需要用到很多第三方的类库,如写一个使用spring的Web项目就需要引入大量的jar包。,少一个Jar包、多一个Jar包往往会报一些让人摸不着头脑的异常。而Maven就是一款帮助程序员构建项目的工具,我们只需要告诉Maven需要哪些Jar 包,它会帮助我们下载所有的Jar。

pom.xml

pom.xml,是Maven的核心配置文件,pom称为Project Object Model(项目对象模型),它用于描述整个Maven项目,所以也称为Maven描述文件。

1、modelVersion

指定了当前Maven模型的版本号,对于Maven2和Maven3来说,它只能是4.0.0

2、groupId

包名,一般来说groupId是由三个部分组成,每个部分之间以"."分隔

3、artifactId

 可以认为是Maven构建的项目名,比如你的项目中有子项目,就可以使用"项目名-子项目名"的命名方式

4、version

版本号,SNAPSHOT意为快照,说明该项目还在开发中,是不稳定的版本。在Maven中很重要的一点是,groupId、artifactId、version三个元素生成了一个Maven项目的基本坐标

5、packing

项目打包的类型,可以使jar、war、rar、ear、pom,默认是jar

6、dependencies和dependency

前者包含后者,项目中不可避免的,会依赖很多其他的jar包,在Maven中,这些依赖就被称为dependency。

7、properties

properties是用来定义一些配置属性的,例如project.build.sourceEncoding(项目构建源码编码方式),可以设置为UTF-8,防止中文乱码,也可定义相关构建版本号,便于日后统一升级。

8、build

 build表示与构建相关的配置,比如build下有finalName,表示的就是最终构建之后的名称。

多模块依赖和继承

项目结构图:
parent
    ├─childA(model层)
    │  └─pom.xml(jar)
    ├─childB(web层)
    │  └─pom.xml(war)
    └─pom.xml(pom)
parent中执行mvn install就能将 childA和childB 一起编译,parent的pom.xml做如下配置:

<groupId>com.song</groupId>
<artifactId>parent</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>    <!-- pom表示它是一个被继承的模块 -->

<modules>
    <module>childA</module>   <!-- 不加module则不会被联合编译 -->
    <module>childB</module>
</modules>


childA和childB的pom.xml都需要配置parent,防止引入的包冲突(如果不加parent,会分别去编译他们引入的依赖,会重复引入包):
<!-- childA 的 pom.xml-->
<parent>
    <artifactId>parent</artifactId>
    <groupId>com.song</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>childA</artifactId>
<packaging>jar</packaging>

<!-- childB 的 pom.xml-->
<parent>
    <artifactId>parent</artifactId>
    <groupId>com.song</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>childB</artifactId>
<packaging>war</packaging>
子pom间存在引用关系,比如childB引用到了childA的jar包
<dependency>
   <groupId>com.module</groupId>
   <artifactId>childA</artifactId>       <!--加上childA的依赖-->
   <version>1.0-SNAPSHOT</version>
</dependency>

子项目继承父项目依赖

parent中加上<dependencyManagement>,child项目就可以继承parent项目的依赖,并且在child中可以不用加version了。

<dependencyManagement>
   <dependencies>
      <dependency>
           <groupId>javax.servlet</groupId>
          <artifactId>servlet-api</artifactId>
          <version>2.5</version>
      </dependency>
   </dependencies>
</dependencyManagement>

评论