Maven入门

来源:互联网 发布:类似金数据表单工具 编辑:程序博客网 时间:2024/05/13 11:18

什么是Maven?

Maven是一个用于项目构建的工具,被认为是Ant的替代品或者继任者。事实上Maven的功能要远远超出Ant,它不仅仅提供编译的脚本,更是在整 个项目周期中提供测试,发布,文档生成等功能,并且有着独特的依赖性管理方法。它提供了三种功能:

  1. 依赖的管理:仅仅通过jar包的几个属性,就能确定唯一的jar包,在指定的文件pom.xml中,只要写入这些依赖属性,就会自动下载并管理jar包。
  2. 项目的构建:内置很多的插件与生命周期,支持多种任务,比如校验、编译、测试、打包、部署、发布…
  3. 项目的知识管理:管理项目相关的其他内容,比如开发者信息,版本等等。

maven最突出的特点是不需要上网单独下载jar包,只需要在配置文件pom.xml中配置jar包的依赖关系,就可以自动的下载jar包到我们的项目中。这样,别人开发或者使用这个工程时,不需要来回的拷贝jar包,只需要复制这个pom.xml就可以自动的下载这些jar包。

什么是POM?

POM是项目对象模型(Project Object Model)的简称,它是Maven项目中的文件,使用XML表示,名称叫做pom.xml(Ant是通过build.xml执行构建任务的)。在Maven中,当谈到Project的时候,不仅仅是一堆包含代码的文件。一个Project往往包含一个配置文件,包括了与开发者有关的,缺陷跟踪系统,组织与许可,项目的URL,项目依赖,以及其他。它包含了所有与这个项目相关的东西。事实上,在Maven世界中,project可以什么都没有,甚至没有代码,但是必须包含pom.xml文件

下面是一个POM项目中的pom.xml文件中包含的元素:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.cry.test</groupId>  <artifactId>test</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>jar</packaging>  <name>First Project</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency></project>
  • project:是xml文件的根元素,我们主要关心根元素下的子元素 。
  • modelVersion:定义了当前POM模型的版本,Maven2或者Maven3 都只能是4.0.0,它是必须的。
  • groupId:定义了项目属于哪个组,一般来说这个往往和公司或组织关联,比如说,你所在的公司为mycom.那就应该定义为com.mycom.mymaven,mymaven为项目名称 。
  • artifactId:定 义了当前Maven项目在组中的唯一id,例如HelloMaven这个项目,我则把他定义为hello-maven,还例如spring项目,他的 groupId为org.springframework,对于content项目来说artifactId则为spring-content,web项 目则为spring-web。
  • version:项目的版本号,用于维护项目的升级和发布
  • packaging:打包的格式类型,一般都是jar,也可以是war之类的。如果不填,默认就是jar。
  • name: 项目的名称, Maven 产生的文档用,一般没有实际的用处,只是用于标识该项目。
  • url:哪个网站可以找到这个项目,提示如果 Maven 资源列表没有,可以直接上该网站寻找, Maven 产生的文档用。
  • properties:pom定义一些常量,在pom中的其它地方可以直接引用。其中project.build.sourceEncoding表示项目统一字符集编码。
  • dependencies:依赖关系 ,在这里可以声明项目需要依赖的jar包。dependencies下每一个dependency都代表需要依赖的jar包,由groupId、artifactId、version就可以确定唯一jar包,其中scope表示声明的范围:compile (默认范围,用于编译)、provided(类似于编译,但支持你期待jdk或者容器提供,类似于classpath)、runtime(在执行时,需要使用)、test(用于test任务时使用)、system(需要外在提供相应得元素。通过systemPath来取得)

在pom.xml中,modelVersion、groupId、artifactId、version必须的字段(尽管在继承中groupId和version不需要明确指)。其中groupId、artifactId、version字段就像地址和邮戳,它标记了仓库中的特定位置,就像Maven projects的坐标系统一样。(在gradle中配置包的依赖也需要这三个字段groupId:artifactId:version,如’com.squareup.okhttp:okhttp:2.5.0’)

IntelliJ idea如何创建Maven工程?

  1. 在Default Settings中首先确认是否已经启动Maven Integration插件:

这里写图片描述


2. 在New Project中选择创建Maven项目,可以选择工程所需的JDK,还可以通过勾选“Create from archetype”,选择要使用的maven项目模板。如果需要web模板可以选择webapp,我们这里直接选择快速创建一个标准的Java模板:

这里写图片描述


3. 点击Next后,填写项目的组名GroupId、项目的模块名ArtifactID、项目的版本名Version

这里写图片描述


4. 点击Next后,可以选择项目所需Maven的版本,我们可以直接去官网http://maven.apache.org/ 下载最新的maven版本,通过…按钮进行配置。这里直接使用idea内置的Maven版本。注意,这里在Properties中添加一个参数archetypeCatalog=internal,不加这个参数,在maven生成骨架的时候将会非常慢,有时候会直接卡住。原因在于:archetypeCatalog表示插件使用的archetype元数据,不加这个参数时默认为remote,local,即中央仓库archetype元数据,由于中央仓库的archetype太多了,所以导致很慢,指定internal来表示仅使用内部元数据。

这里写图片描述


5. 继续点击Next,这里可以填写项目名、module名、项目所在的位置等等。点击Finish创建工程完毕。

这里写图片描述

maven工程是什么样子的?

点击Finish后创建的工程如下所示:

这里写图片描述

简单总结下就如下面所示:

project    |-src--main--java--你的源代码    |    |--test----java--你的单元测试代码    |-target--编译出的文件和jar包  (编译代码后自动创建)    |-pom.xml--项目信息以及任务定义

项目中以groupid作为包名,并自动生成了pom.xml文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.cry.test</groupId>  <artifactId>test-maven</artifactId>  <version>1.0-SNAPSHOT</version>  <packaging>jar</packaging>  <name>test-maven</name>  <url>http://maven.apache.org</url>  <properties>    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  </properties>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>  </dependencies></project>

pom.xml文件中声明了整个工程的groupId、artifactId、version和其他相关信息。项目中使用了单元测试,所以在这里需要添加一个jar包依赖,并指指定用于test范围。

如何利用Maven执行任务?

在IntelliJ IDEA中我们可以通过View –> Tool-Windows –> Maven Projects调出Maven的操作面板:

这里写图片描述

在Lifecycle中列出了Maven可执行的任务,我们可以选择其中所需的任务进行操作。

Maven的生命周期

在上面打开的面板中,Lifecycle列出了Maven工程创建过程中所可以执行的任务。Maven把这些任务分成三大生命周期,他们是相互独立的,分别是:

  1. clean 清理
  2. default 构建
  3. site 建站

一般来说,clean和default比较常用。每个生命周期又有不同的阶段,阶段按顺序执行。比如default周期就包括了validate–>initialize–>其他阶段–>compile–>其他阶段–>test-compile–>其他阶段–>test–>其他阶段–>package–>其他阶段–>install–>deploy 等20几个阶段。

下面是这三大生命周期中的几个重要的阶段,也就是idea maven操作面板中列出的任务。

  • clean :清理上一次构建生成的文件,即删除target文件夹,删除生成的package包以及class等文件。
  • compile: 编译项目的主源码,执行命令后会在target文件夹中的classes中生成对应的class文件。
  • test:先自动进行编译,在运行所有的测试用例。
  • package:接受编译好的代码,打包成可发布的格式,如JAR。
  • install:将包安装到Maven本地仓库,供本地其他Maven项目使用。
  • deploy:将最终的包复制到远程仓库,供其他开发人员和Maven项目使用。
  • site:建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成站点。

构建的时候,会依次从最上面的阶段执行到指定的那个阶段。比如执行install任务,它属于default生命周期,实际会执行validate–>initialize–>…–>verify–>install等二十几个阶段。生命周期直接是相互独立的,所以执行install任务时,它只会从default生命周期开始,然后结束于install阶段。所以在开发过程中,我们经常先执行clean操作、然后执行install操作。

执行install操作后会在工程目录下生成target文件夹,用于存储编译后输出的文件和jar包 (jar包名默认以artifactId-版本号命名)。

这里写图片描述

参考:

Maven官方文档
Maven 与 IntelliJ IDEA 的完美结合
Maven的配置文件pom.xm
【手把手教你Maven】构建过程
Maven日常 —— 你应该知道的一二三
Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置

1 0
原创粉丝点击