Apache Maven的入门使用之经常使用操做以及核心概念介绍(2)

  咱们接着上篇文章,来继续介绍Maven中几个核心的概念:html

POM (Project Object Model)
Maven 插件
Maven 生命周期
Maven 依赖管理
Maven 库

 

POM (Project Object Model)

  咱们首先来看一下,上篇文章作演示的时候生成的pom.xml文件:web

<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.test.helloworld</groupId>
  <artifactId>helloworld</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>helloworld</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>

在该配置文件中有三个必须写的字段,groupId,artifactId,version。groupId表明组织或者建立团队的名字,一般用域名全称倒过来,好比说Apache maven 官方就是org.apache.maven。artifactId表示项目的惟一名称。version标识项目开发的版本,snapshot一般表示一个项目处于开发阶段。apache

全部的项目都继承super POM文件,除非有额外的特殊设置。服务器

 

Maven 生命周期maven

  项目构建和分发的过程就是一个项目的生命周期。系统内置有三种构建生命周期:default, clean 和 site。default生命周期处理项目部署的问题,clean处理项目的清理问题,site处理项目的站点文档问题。不一一说明了,详细能够参考官方文档中的说明 http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.htmlide

clean 生命周期中经常使用的操做:post

mvn pre-clean 执行实际项目清理前所须要的流程单元测试

mvn clean 用来清理构建阶段产生的文件(删除生成的target目录)测试

mvn post-clean 执行完成项目清理所须要的流程网站

 

default 生命周期经常使用的操做:

mvn validate 验证项目配置项或者必要的信息是否正确

mvn initialize 初始化构建状态,好比设置属性或者是建立目录

mvn compile 将项目文件进行编译

mvn test 对项目进行单元测试,这个过程不要求项目代码被打包或者是部署(若是代码没有被编译,那么将首先执行compile的过程)

mvn package 将已经编译好的代码打包为分发的格式,好比jar,或者war等

mvn verify 对集成结果进行检查,测试是否知足预期要求

mvn install 将项目安装到本身本地仓库,用做本地其余项目依赖项

mvn deploy 在继承环境或者版本环境中完成,将最终包复制到远程仓库

 

site 生命周期经常使用的操做:

mvn pre-site 执行项目生成以前所须要的流程

mvn site 生成项目文档

mvn post-site 执行完成网站所须要的流程,为站点部署作准备

mvn site-deploy 将生成的项目文档上传至指定服务器

 

Maven 插件

  Maven经过插件实现其功能,整个Maven都是插件的集合。简单来讲,插件能够帮助咱们建立jar文件,建立war文件,编译文件,进行单元测试等。任何项目中你可以想到的功能都是经过插件来实现的。

 

Maven依赖管理

  Maven经过pom.xml文件dependency标签来配置整个项目的依赖包,而后全部的dependency标签被放在它的父标签dependencies中组成一个依赖库的集合。好比,

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

这里dependency节点中,goupId依旧是组织或者建立团队的名字,artifactId为该插件的名字,version为该插件的版本号。scope为该插件的做用范围。依赖范围用于限制依赖关系传递性,并会影响到各种构建 任务的类文件路径。默认若是配置了该选项,插件将会从http://repo.maven.apache.org/maven2/进行下载。在首次安装的时候咱们能够看到download from xxx。

scope有6种可用的配置项:

compile  这是默认的配置选项,编译的依赖关系在全部项目类路径均可用。并且,这些依赖关系被传递到依赖项目。

provided 这个和compile选项很相似,表示在JDK或容器运行时提供依赖关系。 例如,在为Java Enterprise Edition构建Web应用程序时,能够将Servlet API和相关的Java EE API的依赖项设置为范围,由于Web容器提供了这些类。 此做用域仅在编译和测试类路径中可用,不可传递。

runtime 顾名思义,这个配置项是在项目运行时调用依赖插件,而不是编译的时候。

test 这个主要用于测试阶段,对于项目并非必须不可的。不可传递。

system 与provided相似,除非明确指定包含它的jar文件。

import (Maven 2.0.9+)  只支持在<dependencyManagement>部分的类型pom依赖。 它指示依赖项将被替换为指定POM的<dependencyManagement>部分中的依赖关系的有效列表。 因为它们被替换,所以具备导入范围的依赖关系实际上并不参与限制依赖关系的传递性。

若是有多个子项目有公共的依赖库文件,那么咱们能够在其父pom文件中指定,这样子pom直接作继承就行了。详细状况能够参考官方文档:

https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html

 这里须要注意的是,若是子类依赖包的类型不同,那么须要在继承以后特别设置type字段。由于依赖寻找的顺序是{groupId, artifactId, type, classifier},在不少状况下咱们仅仅须要指定{groupId, artifactId},由于默认状况下type的类型为jar。

 

Maven 库

  Maven库被分为本地库和远程库,本地库能够看作是安装时远程库的一个副本,还包括本地项目构建时的临时构建工做。远程库指除了本地库之外的其余库,能够经过好比file:// 或者 http:// 协议对文件进行访问下载的。好比一些第三方库,repo.maven.apache.orguk.maven.org maven的中心库等。另一些好比公司内部搭建的库,用于内部分享相对隐私的数据。咱们能够经过maven安装目录下,conf目录中的settings.xml来对远程仓库的地址进行配置。具体的配置说明能够参考官方的文档,或者settings.xml的注释部分。这里就很少讲了。

  本地仓库的位置在用户家目录下一个.m2的隐藏文件夹,而后里边有个repository的目录,好比我这里:

  

 

  好比web container插件jetty:  

 

咱们能够在本身的项目编译好以后将其部署到咱们本地的库中,咱们在咱们的项目目录中(pom.xml)所在的目录执行 mvn install。

若是有远成仓库的上传权限,咱们也能够将作好的项目上传至远程仓库。

相关文章
相关标签/搜索