关于Maven

什么是Maven

Maven是一个自动化构建工具,最开始只适用于Java项目,后来逐渐支持C#,Ruby等项目的构建。Maven使用XML格式文件来描述一个项目的依赖,被称为Project Object Model(POM)。一个pom.xml描述了一个项目所有的配置,包括项目信息,项目所依赖的包等等。

Maven可以从一个或者多个代码仓库里(Maven 2 Central Repository)动态下载Java库文件以及插件,并将其保存到本地的仓库里(缓存),从而实现依赖的更新。

自动构建:https://en.wikipedia.org/wiki/Build_automation  

通常,一个Maven项目的代码结构如下:

Maven项目代码结构

接下里主要介绍下Maven项目构建工具两个关键的概念:编译的生命周期与POM。

编译周期

Maven提供了3种内置的编译周期:default(默认),clean(清除),site(位置)。默认周期用于项目的部署,clean周期则用于项目的清除工作,site周期主要处理项目相关的文档。

这里简要的列出default周期所包括的各个阶段以及具体作用:

阶段   任务  maven命令 
validate  验证项目配置是否正确以及必要的信息是否可用 
generate-sources 产生用于编译的源代码 
compile 编译项目源代码 
test 用合适的测试框架测试代码,不应该需要代码打包或者部署
package 以可分发的格式打包编译好的代码,比如JAR
verify 确认集合测试结果以确保质量达标 
install 安装包到本地库,用于其他项目的依赖  mvn install 
deploy 部署,将软件包拷贝到远程仓库,分享给其他开发者

关于项目编译各个生命周期更详细的文档,请参考:

Maven编译周期: https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Lifecycle_Reference

POM

什么是POM? POM,英文全称为Project Object Model,即项目对象模型,是Maven中最基本的组成部分(每个Maven项目都必须的一个文件)。POM是一个XML的文档,里边包含了Maven编译所需的项目信息及其配置。创建时,POM里边就包含了对大多数项目适用的默认值,比如编译目录’target’;源码目录’src/main/java’;测试代码目录,’src/test/java’。

POM文件主要包含了以下几个方面的信息:

  • 项目依赖;
  • 开发者与贡献者列表;
  • 插件列表;
  • 插件配置;
  • 资源列表

一个最小的POM配置需要包括以下几项:

  • 项目根目录‘’标签
  • modelVersion,应该被设为4.0.0
  • groudId,项目所在组的ID
  • artifactId,项目ID
  • version, 给定的组下项目的版本号

例如下面就是一个最小的POM文件:

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1</version>
</project>

稍微复杂一点,添加一个项目的依赖,如下这样一个pom.xml文件:

<project>
  <!-- model version is always 4.0.0 for Maven 2.x POMs -->
  <modelVersion>4.0.0</modelVersion>

  <!-- project coordinates, i.e. a group of values which
       uniquely identify this project -->

  <groupId>com.mycompany.app</groupId>
  <artifactId>my-app</artifactId>
  <version>1.0</version>

  <!-- library dependencies -->

  <dependencies>
    <dependency>

      <!-- coordinates of the required library -->

      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>

      <!-- this dependency is only used for running and compiling tests -->

      <scope>test</scope>

    </dependency>
  </dependencies>
</project>

更多关于POM的信息请参考官方文档:https://maven.apache.org/guides/introduction/introduction-to-the-pom.html