vlambda博客
学习文章列表

Maven 入门(下)-- POM.xml介绍与常用命令

一、POM.xml介绍

毫无疑问,Maven 项目的灵魂就是 pom.xml 文件,所以接下来我会详细地对其进行分析。

1、项目基本信息

pom.xml 文件的第一部分主要用来描述项目的基本信息。

  • <project> 是 pom.xml 的根元素,声明了相关的命名空间,其他的标签都是project标签的子标签

  • <modelVersion> 指定了当前项目对象模型(POM)的版本,对于 Maven 3.x 来说,该值只能是 4.0.0。

  • <groupId> 定义了项目的组名,这个组往往和项目所在的组织或公司关联。

  • <artifactId> 定义了当前 Maven 项目在组中唯一的 ID。

  • <version> 定义了项目的版本号,SNAPSHOT 为快照的意思,也就是说该项目还处于开发阶段。

  • <packaging> 定义了项目的打包类型,可选值有 war、jar 等。

  • <name> 定义了项目的名称。

2、变量配置信息

pom.xml 文件的第二部分通常用来配置一些变量信息。

Maven 入门(下)-- POM.xml介绍与常用命令

  • <project.build.sourceEncoding> 定义了编译的编码格式

  • <maven.compiler.source><maven.compiler.target> 定义了推荐的JDK编译版本

  • <mybatis.version><spring.version> 这个是自定义的标签,后面要维护很多jar包的版本,为了便于维护,可以在这里统一指定版本,后面直接使用${mybatis.version}或者${spring.version} 的形式来调用这些配置项。这样做的好处显而易见,当依赖项的版本升级的时候,可以直接修改变量值即可。

3、依赖管理

阿里云的 Maven 仓库下有各种各样的第三方类库,换句话说就是,只有你想不到的,没有你找不到的。大多数 Maven 项目的依赖项列表都会很长很长,为了便于说明,下面我只列出某些具有特色的。

Maven 入门(下)-- POM.xml介绍与常用命令

Maven 入门(下)-- POM.xml介绍与常用命令

(1)、查找合适的Maven依赖jar包

上文中曾提到,<groupId><artifactId><version> 合起来可以准确地定位一个依赖项。

当然每个包相应的maven标签是什么也不用纠结,你可以在maven repository网站中搜索对应的包名就行了 比如你要查找mybatis的包:

Maven 入门(下)-- POM.xml介绍与常用命令Maven 入门(下)-- POM.xml介绍与常用命令Maven 入门(下)-- POM.xml介绍与常用命令Maven 入门(下)-- POM.xml介绍与常用命令

由于之前通过IDEA创建项目的之后我们已经选择了自动导入Maven的jar

Maven 入门(下)-- POM.xml介绍与常用命令

所以将这段代码复制到pom.xml之后就不需要我们再干什么事情,IDEA会自动将jar包引入

(2)、<exclusions> 主要用于排除依赖。

有时候,我们引入的依赖中可能会包含一些不想要的依赖包,我们想引入自己想要的,这时候就要用到排除依赖了。

使用 <exclusion> 的时候只需要指定 groupId 和 artifactId 就行了,并不需要 version,这是因为 groupId 和 artifactId 就可以定位某种类型的依赖。

(3)、<scope> 用来控制依赖的范围。

test:测试依赖范围。典型的例子是 Jnuit,它只有在编译测试代码及运行测试的时候才需要。

compile:编译依赖范围(其实不止是编译,对测试、运行同样有效),缺省项,如果没有指定,就会默认使用该依赖范围。

provided:提供依赖范围。对编译和测试有效,但在运行时候无效。

runtime运行时依赖范围。对测试和运行有效,但在编译时无效。

注意:如果不知道选哪一种,缺省就对了。

4、构建配置

<build> 元素中包含了执行 Maven 构建周期目标所需的插件以及相关的配置。

Maven 入门(下)-- POM.xml介绍与常用命令

Maven 入门(下)-- POM.xml介绍与常用命令

Maven 入门(下)-- POM.xml介绍与常用命令

  • <finalName>,打成 jar 包或者 war 包时的名称。上文中曾提到,项目打包后的输出目录为 ${basedir}/target

  • <plugins> 用于指定项目在构建过程中使用的插件。一般这些插件在IDEA项目都自动帮你下载配置好了,图形化显示如下面这样:

    Maven 入门(下)-- POM.xml介绍与常用命令

唯一注意的是,maven-surefire-plugin是一个测试运行插件,如果想再Maven打包的时候不希望将测试打包,就可以像我上面的代码一样,在maven-surefire-plugin插件中加上<configuration>标签

Maven 入门(下)-- POM.xml介绍与常用命令

<resources> 描述了各个资源在 Maven 项目中的具体路径。注意,由于我们已经指定了 ${basedir}/src/main/java 存放 Java 源代码,但是比如我们一般写mybatis的mapper.xml文件的时候,又习惯写在src下面的包中,这样好与接口对应,但是这么做会让IDEA在编译的时候找不到mapper.xml的配置文件,因此,下面的这段代码是我们经常加上去的:

Maven 入门(下)-- POM.xml介绍与常用命令

二、使用Maven命令对项目进行清理、编译、测试、打包

首先这些命令在IDEA上已经被集成了,要使用的话很简单,用鼠标点击两下就行了

Maven 入门(下)-- POM.xml介绍与常用命令

下面的介绍主要是为了让大家认识每个命令的作用。

比如现在已经有了一个forest项目

1、清理: mvn clean

该命令会删除 target 目录。可以直接在命令行中执行该命令,只需要切换到项目所在的路径下即可。

Maven 入门(下)-- POM.xml介绍与常用命令

2、编译:mvn complie

Maven 入门(下)-- POM.xml介绍与常用命令

3、测试:mvn test

test 命令在运行时,会执行 compile 命令;而之前我们已经执行过一次 compile 命令,为了确保结果的准确性,可以执行 mvn clean test 命令确保测试之前没有残余物,结果如下图所示。

Maven 入门(下)-- POM.xml介绍与常用命令

Maven 会通过 Surefire 插件,使用 pom.xml 文件中的测试提供者(通常是 Junit)运行测试。执行 test 命令不仅会运行测试,还会产生报告文件,此时 target 目录下的截图如下:

Maven 入门(下)-- POM.xml介绍与常用命令

4、打包:mvn install

该命令会按照 pom.xml 文件中 <packaging> 指定的方式,对编译结果打包。同时,还会把打包好的文件放到本地的 Maven 仓库中,以便其他项目把它当做依赖项使用。命令执行结果如下图所示。

Maven 入门(下)-- POM.xml介绍与常用命令

查看本地的 Maven 仓库,可以看到刚刚打包好的文件。

文章来源师兄博客:http://www.yanhongzhi.com/post/maven-2.html