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

约定优于配置:系统、类库、框架应该假定合理的默认值,而非要求提供不必要的配置。

Maven是包含了一组关于软件项目和软件开发的语义规则的平台。这个基于每一个项目定义的模型实现了如下特征:

  依赖管理

    由于项目是根据一个包含组标识符,构件标识符和版本的唯一的坐标定义的。项目间可以使用这些坐标来声明依赖。

  远程仓库

    和项目依赖相关,使用定义在项目对象模型(POM)中的坐标来创建Maven构件的仓库

  全局性构建逻辑重用

    插件被编写成和项目模型对象一起工作,他们没有被设计成操作某一个已知位置的特定文件。一切都被抽象到模型中,插件配置和自定义行为都在模型中进行。

  工具可移植性/集成

    Maven标准化了POM信息。

  便于搜索和过滤构件

    像nexus这样的工具允许你使用存储在POM中给的信息对仓库中的内容进行索引和搜索

Maven安装目录

bin    ----包含了mvn运行的脚本。这些脚本用来配置Java命令,准备好classpath和相关的java系统属性,然后执行java命令。

boot    ----该目录只包含一个文件。以maven3.0为例,该文件为plexus-classworlds-2.2.3.jar。plexus-classworlds是一个类加载器框架。Maven使用该框架加载自己的类库

conf    ----包含settings.xml。

lib    ----包含了maven运行时需要的java类库。

LISENSE.txt    ----Maven使用的软件许可证

NOTICE.txt    ----Maven包含的第三方软件

README.txt    ----Maven的简单介绍

Apache Ant和 Apache Maven的区别

  Ant

    没有正式的约定。那你必须明确的告诉Ant去哪里找源码,输出放在哪里

    程序化,必须明确的告诉Ant做什么,什么时候做。

    没有声明周期。必须定义目标和目标之间的依赖,必须手工为每个目标附上一个任务序列

  Maven

    拥有约定

    声明式。只需创建一个pom.xml。Maven会帮助你处理其他的事情

    有一个生命周期。当你运行mvn install的时候被调用。

 

mvn archetype:create -DgroupId=com.xx.xx -DartifactId=test -DpackageName=com.xx.xx

archetype:create称为一个Maven目标。archetype被定义为一个原始的模型或类型,在他之后其他类似的东西与之匹配。

groupId,artifactId,packaging,version是Maven的坐标,它们唯一标识了一个项目。name和url是pom提供的描述性元素。他们给人提供了可阅读的名字,讲一个项目关联到项目web站点。dependencies元素定义了依赖。

一个Maven插件是一个单个或多个目标的集合。一个目标是一个明确的任务,他可以作为单独的目标运行,或者作为一个大的构建的一部分和其他目标一起运行。一个目标是maven中的一个工作单元。目标通过配置属性来进行配置,以用来定制行为。

目标定义了一些参数,这些参数可以定义一些明智的默认值。create目标的约定,是创建一个简单的项目,叫做Quickstart。create目标定义了一个配置属性archetypeArtifactId,它有一个默认值为maven-archetype-quickstart。Quickstart archetype生成了一个最小项目的驱壳,包括一个POM和一个类。

Jar插件包含了一组创建Jar文件的目标。

Compiler插件包含一组编译源代码和测试代码的目标。

Surefire插件包含一组运行单元测试和生成测试报告的目标。

通过保持Compiler插件和Maven核心分离,并且提供更新机制,用户很容易能使用编译器的最新版本。通过这种方式,Maven插件提供了通用构建逻辑的全局重用性。

生命周期是包含在一个项目构建中的一系列有序的阶段。Maven可以支持许多不同的生命周期,但是最常用的生命周期是默认的Maven生命周期,这个生命周期中一开始的一个阶段是验证项目的基本完整性,最后一个阶段是把一个项目发布成产品。生命周期单独的定义为验证、测试、发布。

基本生命周期:

phases

  process-resource -> compile -> process-classes -> process-test-resources -> test-compile -> test -> prepare-package -> package

goals  

  resources:resources -> compiler:compile -> resources:testResources -> compiler:testCompiler -> surefire:test -> jar:jar

Maven执行一个阶段的时候,他首先会有序的执行前面的所有阶段,到命令行指定的那个阶段为止。每个阶段对应了零个或多个目标。

当Maven经过以package为结尾的默认生命周期的时候,下面的目标按顺序被执行

  resources:resources

    Resources插件的resources目标绑定到了resources阶段。这个目标复制src/main/resources下的所有资源和其他任何配置的资源目录,到输出目录。

  compiler:compile

    Compiler插件的compile目标绑定到了compile阶段。这个目标编译src/main/java下的所有源代码和其他任何配置的资源目录,到输出目录。

  resources:testResources

    Resources插件的testResource目标绑定到了test-resources阶段。这个目标复制src/test/resources下的所有资源和其他任何的配置的测试资源目录,到测试输出目录。

  compiler:testCompile

    Compiler插件的testCompile目标绑定到了test-compile阶段。这个目标编译src/test/java下的测试用例和其他任何的配置的测试资源目录,到测试输出目录。

  compiler:testCompile

    Compiler插件testCompile目标绑定到了test-compile阶段。这个目标编译src/test/java下的测试用例和其他任何的配置测试资源目录,到测试输出目录。

  surefire:test

    Surefire插件的test目标绑定到了test阶段。这个目标运行所有的测试并且创建那些捕获详细测试结果的输出文件。默认情况下,如果测试有失败,这个目标会终止。

  jar:jar

    Jar插件的jar目标绑定到了package阶段。这个目标把输出目录打包成JAR文件。

Archetype插件通过名字为pom.xml文件创建了一个项目。这就是项目对象模型,一个项目的声明式描述。当Maven运行一个目标的时候,每个目标都会访问定义在项目POM里的信息。当jar:jar目标需要创建一个JAR文件的时候,他通过观察POM来找出这个JAR文件的名字。当compiler:compile任务编译Java源代码为字节码的时候,他通过观察POM来看是否有编译目标的参数。目标在POM的上下文中运行。目标是我们希望针对项目运行的动作,而项目是通过POM定义的。POM为项目命名,提供了项目的一组唯一标识符,并且通过依赖(dependencies),父(parents)和先决条件(prerequisite)来定义和其他项目的关系。POM也可以自定义插件的行为,提供项目相关的社区和开发人员的信息。

Maven坐标定义了一组标识,他们可以用来唯一标识一个项目、一个依赖或者Maven POM里的一个插件。groupId,articfactedId,version和packaging这些组合的标识符拼成了一个项目的坐标。一个Maven坐标是一个地址,即空间中的某个点:从一般到特殊。当一个项目通过依赖,插件或府项目引用和另外一个项目关联的时候,Maven通过坐标来精确定位一个项目

  groupId:团体标识的约定是以创建这个项目组织名称的逆向域名开头

  artifactId:在groupId下表示一个单独项目的唯一标识符

  version:一个项目的特定版本。发布的项目有一个固定的版本标识来指向该项目的某一个特定的版本。而正在开发中的项目可以用一个特殊的标识:SNAPSHOT。

  packaging:项目的类型,默认是jar,描述了项目打包后的输出。

Repository

在Maven中,构件和插件是在他们被需要的时候从远程的仓库取来的。Maven自带了一个用来下载Maven核心插件和依赖的远程仓库地址(http://repol.maven.org/maven2)。

Maven仓库是通过结构来定义的,一个Maven仓库是项目构件的一个集合,这些构件存储在一个目录结构下面,他们的格式能很容易被Maven所理解。Maven仓库的标准是按照下面的目录格式来存储构件的,相对于仓库的根目录:

  /groupId/artifactId/version/artifactId-version.packaging

Maven从远程仓库下载构件和插件到你本机上,存储在你的本地Maven仓库里,一旦Maven已经从远程仓库下载了一个构件,他将不需要再被下载。Maven会现在本地仓库查找插件。

  

Dependencies

一个复杂的项目将会包含很多依赖,也有可能包含依赖于其它构件的依赖。Maven支持了传递性依赖。Maven会隐式的把这些库间接依赖的库也加入到你的项目中。Maven也会处理这些依赖中的冲突,同时能让你自定义默认行为,或排除一些特定的传递性依赖。

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

Maven提供了不同的依赖范围(dependency scope)。当为项目创建一个Jar文件的时候,他的依赖不会被捆绑在生成的构件中,他们只是用来编译。当用Maven来创建War或Ear,可以使用provided范围,它排除WAR文件中特定的依赖。provided范围告诉Maven一个依赖在编译的时候需要,但是他不应该被捆绑在构建的输出中。

Site Generation and Reporting

Maven可以生成文档和报告。

mvn site只关心处理在src/site目录下的site内容,还有生成报告。他会在target/site目录下看到一个项目web站点。

Maven概述的更多相关文章

  1. Java入门到精通——工具篇之Maven概述

    为接手gxpt准备已经快一个月了从SSH2-->EJB-->环境搭建-->Maven的构建.下面就带领大家初始Maven 一.什么是Maven. Maven是一个垮平台的项目管理工具 ...

  2. Maven详解(一)------ Maven概述

    1.引言 你能搜到这个教程,说明你对 Maven 感兴趣,但是又不是太理解.那么接下来这个系列的教程将会详细讲解 Maven 的用法,相信你看完之后,一定能对 Maven 的理解更进一步! 2.常规项 ...

  3. Maven概述(一)

    Maven是什么? Apache Maven is a software project management and comprehension tool. Based on the concept ...

  4. Maven实战读书笔记(一):Maven概述

    1.1 Maven是什么,能做什么 Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建.依赖管理和项目信息管理. Maven的用途之一是项目构建,能够自动化构建过程,从清理.编译. ...

  5. 【Java EE 学习 82 上】【MAVEN基本安装和使用方法】

    一.Maven概述 1.什么是Maven? Maven中文意思是"行家"."专家",它是一种跨平台的项目管理工具. 2.Maven有什么作用? Maven能够实 ...

  6. 使用maven来管理java项目

    初学maven,简单总结一下学习心得,若有不对的地方,欢迎各位大神给我指正~ 总结分为6个部分 maven概述 maven安装 maven项目结构和创建方法 maven配置文件settings.xml ...

  7. Maven Myeclipse 搭建项目

    一.maven概述 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具! 简单说Maven 是一个项目管理和构建自动化工具 二.环境搭建 1. ...

  8. Maven(一)初识Maven

    前言 在这之前一直都有去看关于Maven的相关介绍,但是没有到真正要用的时候,自己总是以为懂了.其实真的感觉Maven并没有想象的那么简单! 那我们该怎么去学习maven呢?接下来我将从: 初步认识m ...

  9. maven基本基础知识及命令学习-1

    Maven概述:Maven是很有效的项目管理工具,maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目构建.报告和文档的软件项目管理工具.统一管理环境,架包等. 一 maven下载 ...

随机推荐

  1. JAVA基础知识之NIO——Buffer.Channel,Charset,Channel文件锁

    NIO机制 NIO即NEW IO的意思,是JDK1.4提供的针对旧IO体系进行改进之后的IO,新增了许多新类,放在java.nio包下,并对java.io下许多类进行了修改,以便使用与nio. 在ja ...

  2. CentOS----使用yum命令出现“could not retrieve mirrorlist http://mirrorlist.centos.org ***” - ybq155”

    无聊安装了个mini版的32位的CentOS 6.5,进来想安装个东西,yum install emacs 提示什么 Loaded plugins: fastestmirror, refresh-pa ...

  3. PHP的autoload机制的实现解析

    在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利 一.autoload机制概述 在使用PHP的OO模式开发系 ...

  4. css+div打造三角形(箭头)

    在很多网站都见过这样的箭头,之前我一直以为是图片,直到今天才知道原来可以用css做.开始看代码没太看懂,后来自己试了几遍才恍然大悟.贴出来分享下.(大神请直接忽略) 先看代码: HTML部分就是一个单 ...

  5. Android 检查手机网络是否可用

    添加网络状态权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 代 ...

  6. N的阶乘末尾0的个数和其二进制表示中最后位1的位置

    问题一解法:     我们知道求N的阶乘结果末尾0的个数也就是说我们在从1做到N的乘法的时候里面产生了多少个10, 我们可以这样分解,也就是将从0到N的数分解成因式,再将这些因式相乘,那么里面有多少个 ...

  7. 超级迷宫 nabc

    特点之一:益智模式 N  我们的游戏需要一点点益智答题使其精彩 A 在走迷宫的过程中,会遇到某一个点,出现一个益智小问题,答对即可通过 B 增加游戏的趣味性,吸引用户 C 答题游戏不少,前不久腾讯的手 ...

  8. gitgub利用客户端实现简单的上传和同步

    新建项目 打开客户端(将项目拷贝到本地) 选择要clone到的文件夹 想该文件夹中,导入自己需要上传的代码 然后,在网站上登录自己的gitgub,就可以看到刚才上传的项目了╮(╯▽╰)╭

  9. json 递归查找某个节点

    一段json可能有很多的子节点,需要查询到某一个节点 用到的js是 find-in-json.js 地址是:https://gist.github.com/iwek/3924925 貌似翻|||墙才能 ...

  10. mybaties 查询 语句正确 但是查不到结果

        控制台输出的语句拿到数据库查询就有数据,但是一直显示不出来  也不报错 后来  百度发现数据库连接不对  因为其中引用了两个数据库 所有写混了   ---------------------- ...