`
slikel
  • 浏览: 65780 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Maven的核心概念

 
阅读更多

Maven是什么?

 

首先,Maven是什么?

         一个项目管理工具,包含项目对象模型(Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System) 和用来运行定义在生命周期阶段中插件目标的逻辑 

什么是约定优于配置?

       系统、类库、框架应该假定合理的默认值,而非要求提供不必要的配置。在Maven中,它提供一些默认的选项,比如: 

      源代码约定存放在   project path/src/main/java

      资源文件存放在      project path/src/main/resources

      测试代码存放在      project path/src/test

      生成项目JAR的类   project path/target/classes

      项目JAR文件         project path/target 

什么是Maven插件的全局重用性?

       Maven的核心其实不做什么实际的事情,除了解析一些XML文档,管理生命周期与插件之外,它什么也不懂。反倒是Maven的插件被委派成主要职责的执行者,它们可以影响Maven的生命周期,提供对目标的访问。

       Maven Surefire : 负责运行单元测试的插件,插件的发展往往有很好的向后兼容性,比如你可以用新版本的surefire插件来运行你的Junit3单元测试,结果也可以成功运行。 但是如果你想用surefire运行TestNG写的测试用例,你也可以运行,除了POM中一个插件的版本号,你不需要更改你项目的任何东西.

       这种机制不仅仅适用于Surefire插件,也适用于项目使用Compiler插件进行编译等等,Maven将一般的构建任务抽象成插件,同时这些插件得到了很好的维护以及全局共享,你不需要从头开始自定义你项目的构建系统,然后提供支持。可以有人来维护这些插件,可以从远程仓库下载,这些都是基于 Maven插件的全局重用性. 

如何理解,一个"项目"的概念模型?

       Maven维护一个项目的模型,你需要为项目描述其属性。 项目的许可证是什么? 谁开发这个项目?这个项目有依赖于其他项目吗? Maven不仅仅类似于make和Ant的工具的基础上的改进,它基于项目模型, 这个项目定义的模型实现了一下特征:

    1. 依赖管理
      项目是根据一个包含 组标识符,构建标识符和版本来定义,项目可以使用这些来声明依赖
    2. 远程仓库
      和项目依赖相关的,我们可以使用定义在项目对象模型(POM)中的坐标来创建Maven构件的仓库
    3. 全局性构建逻辑重用
      插件被编写成和项目对象模型一起工作,一切都被抽象到模型中,插件配置和自定义行为都在模型中进行
    4. 工具可移植性/集成
      Maven出现之前,每个IDE都有不同的方法来存储实际上是自定义项目对象模型的信息。Maven标准化了这种描述,每个IDE仍然可以继续维护它的自定义项目文件,但是这些文件可以很容易的由模型生成。
    5. 便于搜索和过滤构件
      像Nexus这样的工具,允许你使用存储在POM中的信息对仓库中的内容进行索引和搜索。

     一个简单的Maven示例:

      在任何地方编写一个POM.XML文件,比如 d:/mvn_test/pom.xml

      写下如下代码:

<project><modelVersion>4.0.0</modelVersion><groupId>org.sonatype.mavenbook</groupId><artifactId>my-project</artifactId><version>1.0</version></project>

 

      在命令行中定位到, d:/mvn_test下, 运行 mvn install

        maven则会根据项目对象模型文件生成一个项目,  会创建target目录, 目录中会生成一个jar包跟一个存放POM属性文件的目录.

Maven标准目录结构

 

目录 描述
src/main/java 源代码
src/main/resources 资源文件
src/main/filters 资源过滤文件
src/main/assembly Maven套件描述
src/main/config 配置文件
src/main/webapp web应用资源
src/test/java 测试源代码
src/test/resources 测试资源
src/test/filters 测试资源过滤文件
src/site 应用站点
LICENSE.txt 项目授权文件
README.txt Project's readme

 

Maven的常用命令

     mvn 命令是使用率最多的,常与下列参数一起使用:

命令 描述
mvn archetype:create 创建Maven项目
mvn compile 编译源代码
mvn test-compile 编译测试源代码
mvn test 运行应用程序中的单元测试
mvn site 生成项目相关信息的网站
mvn clean 清除项目目录中的生成结果
mvn package 根据项目生成的jar
mvn install 在本地Repository中安装jar
mvn eclipse:eclipse 生成Eclipse项目文件

Maven 实战

       使用maven archetype插件来创建一个项目;

mvn archetype:create     -DgroupId=org.sonatype.mavenbook.ch03     -DartifactId=simple     -DpackageName=org.sonatype.mavenbook

archetype:create 称之为maven的目标(通过archetype快速创建一个项目), 类似于Ant的一个目标.

-DName=value 代表给指定参数传入相应的值.

archetype:create  插件的前缀是 archetype  ,目标为 create

其创建于artifactId匹配的目标--- simple ,此为项目的基础目录.

 

 

 

 

通过上面步骤创建了一个应用,下面需要构建与打包这个应用了

mvn install

则可以将产生的项目构建并打包,则会产生target目录,结构如下:



 

 

其会将应用打包,你可以运行target下的jar文件,

 

 



  

 

Maven核心概念

 

 上面,我们用了两种类型的命令来运行maven,

            第一条命令是一条单个的插件目标 archetype:create

            第二条命令是生命周期阶段-install

   为了运行单个maven插件目标 ,我们使用 mvn archetype:create这样的语言,这里archetype是一个插件标识而create是目标标识。 一个maven插件是一个单个或者多个目标的集合。

     Maven插件的例子有一些简单但核心的插件,像Jar插件,它包含了一组创建Jar文件的目标,compiler插件,它包含一组编译源代码和测试代码的目标 等等 


 

  

 

另外,一个目标是一个明确的任务,它可以作为独立的目标运行,或者作为一个大的构建的一部分和其他目标一起运行。

       一个目标是Maven中的一个"工作单元." 比如: Compiler插件中的compile目标,它用来编译项目中所有源文件.  目标也可以定义一些参数,参数可以定义一些明智的默认值。 可以使用-DName=value方式传入.

        事实上,Maven的核心对你项目构建中特定的任务毫无所知。 它将所有任务代理给Maven插件来做,比如Compiler插件和Jar插件,它们在需要的时候被下载下来并且定时从Maven中央仓库更新。

        当你下载Maven的时候,你得到的仅仅是一个包含了基本功能的Maven,它知道如何解析命令行,管理classpath,解析POM文件,在需要的时候下载Maven插件等等。  通过保持Compiler插件与Maven核心分离,并且提供有效的更新机制,我们很容易使用编译器的最新版本。

 

 

Maven生命周期

 

      生命周期是包含在一个项目构建中的一些列有序的阶段。Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认的Maven生命周期,其第一阶段是验证项目的基本完整性,最后一个阶段是把一个项目发布成产品。

         默认的Maven生命周期 




  

 

 

 其中,插件目标可以附着在生命周期阶段上。 随着Maven沿着生命周期的阶段移动,它会执行附着在特定阶段上的目标。

         Maven执行一个阶段的时候,它首先会有序的执行前面的所有阶段,到命令行指定的那个阶段为止。

Maven坐标

        Archetype插件通过名字为pom.xml的文件创建了一个项目。这就是项目对象模型(POM),一个项目的声明描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。 比如; 当jar:jar目标需要创建一个JAR文件的时候,他通过观察POM来找出这个Jar文件的名字。

       POM为项目命名,提供了项目的一组唯一标识符(坐标),并且通过依赖(dependencies),父(parents)和先决条件 (prerequisite)来定义和其他项目的关系。POM也可以定义插件的行为,为提供项目相关的社区和开发人员的信息.

      一般来说,POM中的groupId,artifactId,version和packaging构造成项目的坐标,一个Maven坐标是一个地址,当一个项目通过依赖,插件或者父项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目。

 

 

 

 

Maven坐标通过使用冒号作为分隔符来写:  groupId:artifactId:packaging:version

 


 

 

 

Maven仓库

      Maven中,构建和插件是在它们被需要的时候从远程仓库取出来的,初始的Maven下载包的大小很小,大概1.8M, 主要是初始的Maven不包括很多插件。 它只包含了几近赤裸的最少值,而在需要的时候再去仓库取。

      Maven从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里。一旦Maven已经下载过一个构件,它将永远不需要再下载一次,因为Maven会首先查找本地的仓库,然后才是其他地方。

      Maven仓库既是一个从远程仓库下载的构件的缓存,也允许你的项目相互依赖。

Maven依赖管理

     我们可以在POM中定义项目的依赖,一个复杂的项目将会包含很多依赖,也有可能包含依赖于其他构建的依赖。这是Maven最强大的特征之一,它支持了传递性依赖。  比如说,你的项目依赖一个库,而这个库又依赖于5个或者10个其他的库(比如Spring),那么你不必找出所有这些依赖,然后写入POM,你只需要加上你直接依赖的那些库,Maven会隐式的把这些库间依赖的库也加入到你的项目中,Maven也会处理这些依赖中的冲突,同时能让你自定义默认的行为,或者排除一些特定的传递性依赖。

     Maven中,一个依赖不仅仅是一个JAR,它是一个POM文件,这个POM文件可能也声明了对其他构建的依赖。这些依赖的依赖叫做传递性依赖,Maven仓库不仅仅存储二进制文件,也存储了这些构建的元数据,才使传递性依赖成为可能。 

Maven站点生成和报告

       Maven另外一个重要特征是,它能生成文档和报告。 运行mvn site命令即可。

       这个命令会运行site生命周期阶段。 它不像默认生命周期那样,管理代码生成,操作资源,编译,打包等。 site生命周期只关心处理在src/site目录下的site内容,还有生成报告。

       它会产生target/site目录,里面存放着一个web站点,它包含项目的一些报告。 

Maven使用Demo:

    利用m2eclipse插件来创建demo:

使用m2eclipse创建web项目:  

 

 

 



  

 

 



 

  

 

这里m2eclipse会帮你做好一切准备工作,包括
创建相应的目录 、生成一个Servlet 、 在pom中加入项目默认依赖、添加jetty 插件.

 

 

 项目创建好之后,有一个默认的servlet来测试项目是否生成成功。 

 

 

 命令行进入到项目根路径: 运行命令 mvn jetty:run 

 

 

 

 

在m2eclipse创建web项目时,Jetty插件默认被安装,你可以查看pom.xml中的信息,则可以看到如下代码:

 



  

 

 

 

若命令行信息无误,则可以在浏览器中测试项目是否成功.默认的Servlet中,只打印出一句代码: 

 

 



  

 

 


 

 

 

 

测试成功的效果则如下: 

 

 



 

  • 大小: 14.7 KB
  • 大小: 20.2 KB
  • 大小: 10.9 KB
  • 大小: 9 KB
  • 大小: 12.1 KB
  • 大小: 27.5 KB
  • 大小: 20.8 KB
  • 大小: 55.1 KB
  • 大小: 8.3 KB
  • 大小: 3.4 KB
  • 大小: 41.3 KB
  • 大小: 20.6 KB
分享到:
评论

相关推荐

    深入解析 Maven 核心概念与高级特性

    使用场景及目标:适用于需要理解和掌握 Maven 的核心概念及其高级特性的开发团队成员,帮助他们在实际项目中有效地使用 Maven 进行构建和依赖管理。 阅读建议:建议读者结合实际项目案例进行实践操作,逐步掌握 ...

    apache-maven-3.6.3安装包

    **Maven核心概念** 1. **项目对象模型(Project Object Model, POM)** Maven 的核心是POM,它是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖、构建目标等。POM使得Maven能够理解项目结构,并自动...

    Maven+Hibernate+Spring+Spring MVC开发新闻发布系统

    第3课 理解Maven核心概念(一) 第4课 使用Maven核心概念(二) 第5课 使用Maven创建web项目 第6课 使用Maven构建多模块项目(一) 第7课 使用Maven构建多模块项目(二) 第8课 使用Nexus搭建Maven私服 第9课 使用...

    maven的rar包

    1. **Maven核心概念** - **项目对象模型(POM)**: POM是Maven中的核心概念,它是XML格式的配置文件,包含了项目的基本信息、依赖、构建目标、插件等信息。 - **依赖管理**: Maven自动处理项目的依赖关系,从远程...

    apache-maven-3.3.9.rar

    **一、Maven核心概念** 1. **项目对象模型(Project Object Model,POM)** Maven的核心是POM,它是项目配置信息的XML文件。POM包含了项目的基本信息,如项目名称、版本、描述、依赖、构建设置等。通过POM,Maven...

    Maven学习笔记

    Maven核心概念** - **POM**: Maven的中心概念,是一个XML文件,包含了项目的基本信息,如项目坐标(groupId, artifactId, version)、依赖、插件等。 - **依赖管理**: Maven通过POM文件管理项目所依赖的库,依赖...

    maven 从基本概念学习到构建项目应用

    ** Maven核心概念 ** Maven是一个Java项目管理工具,它主要负责项目的构建、依赖管理和项目信息管理。Maven通过使用一种标准的项目对象模型(Project Object Model,POM),能够自动化构建过程,使得开发人员无需...

    maven 实用指南 中文

    **一、Maven核心概念** 1. **项目对象模型(Project Object Model, POM)**:POM是Maven的核心,它是一个XML文件,包含了项目的基本信息,如项目坐标(groupId, artifactId, version)、依赖、构建配置等。 2. **...

    maven构建项目可以粘贴的内容

    一、Maven核心概念 1. 项目对象模型(Project Object Model,POM):Maven的中心概念是POM,它是项目的配置文件,通常以`pom.xml`的形式存在。POM包含了项目的基本信息,如项目名称、版本、开发者信息,以及项目...

    maven 3.3.9 mac zip

    ### Maven核心概念 1. **项目对象模型(Project Object Model, POM)**:Maven的中心概念是POM,它是XML格式的配置文件,包含了项目的基本信息、依赖、构建指令等。POM文件帮助Maven理解项目结构和需求。 2. **...

    Maven入门巨无霸视频教程(2.24G)

    使用Maven核心概念介绍(坐标、依赖、仓库、插件、生命周期等)、Maven与第三方Elicpse整合及如何在Eclipse中使用Maven、什么是私服、Maven为什么使用私服、Maven私服Nexus的安装使用、如何使用Maven构建Web应用、使用...

    maven常用包

    一、Maven核心概念 1. 项目对象模型(Project Object Model,POM):Maven的中心概念,它是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖、构建目标等。 2. 仓库:Maven通过仓库获取依赖,如本地仓库...

    maven项目管理工具

    1. **Maven核心概念** - **项目对象模型(Project Object Model, POM)**:Maven项目的配置文件,以XML格式存储,包含了项目的基本信息、构建配置、依赖关系等。 - **坐标(Coordinates)**:每个Maven项目都有...

    maven 安装包用于项目管理

    1. **Maven核心概念** - **项目对象模型(Project Object Model, POM)**:POM是Maven项目的基础,它是一个XML文件,包含了项目的基本信息,如项目名称、版本、依赖、构建目标等。 - **坐标(Coordinates)**:每...

    Maven3实战笔记.pdf

    1. Maven核心概念:包括POM(Project Object Model)、坐标系统(Group ID, Artifact ID, Version)、仓库(本地仓库和远程仓库)以及生命周期(Clean, Validate, Compile, Test, Package, Verify, Install, Deploy...

    maven项目构建入门书籍

    ### Maven核心概念 1. **项目对象模型(Project Object Model, POM)**: Maven的中心概念是POM,这是一个XML文件,包含了项目的配置信息,如项目属性、依赖、构建目标等。 2. **坐标(Coordinates)**: Maven使用...

    Maven实战 Maven实战Maven实战

    #### Maven核心概念 1. **坐标**:Maven使用坐标来唯一标识一个库,包括groupId、artifactId和version三个部分。 2. **依赖**:项目依赖其他项目时,需要在pom.xml文件中声明依赖关系,Maven会自动下载所需的依赖库...

    Maven 实战源码

    1. Maven核心概念: - POM:项目对象模型,是Maven的核心,用于定义项目属性、依赖、构建目标等。 - 生命周期:包括清理、初始化、编译、测试、打包、验证、部署等多个阶段,每个阶段都有预定义的默认目标。 - ...

Global site tag (gtag.js) - Google Analytics