1.1 Maven是什么,能做什么

Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建、依赖管理和项目信息管理。

Maven的用途之一是项目构建,能够自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署,只需要输入简单命令即可(如mvn clean install)。

Maven不仅是构建工具,还是依赖管理工具和项目信息管理工具,通过提供中央仓库,自动帮我们下载构件(artifact)。

Remark:Maven依赖于JDK,安装Maven之前需要先安装JDKMaven可以运行在JDK1.4及以上版本。

1.2 POM文件

Maven项目的核心是pom.xml,POM(Project Object Model)项目对象模型,定义项目基本信息,描述项目如何构建,声明项目依赖等。

简单的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.wangdh.maven</groupId>

   <artifactId>maven-demo</artifactId>

   <version>1.0.0-SNAPSHOT</version>

   <packaging>jar</packaging>

</project>

project是所有pom.xml的根目录;

modelVersion指定当前POM模型的版本,对Maven 2Maven 3而言,该值只能是4.0.0。

groupId、artifactId、version定义了一个项目的基本坐标。

packaging可以为jar(默认)、pomwar,是基于基本坐标进行区分的。

1.3 约定大于配置

Maven中,使用了约定大于配置的原则,可以大量减少配置。默认的约定有:

  1. 源码路径 src/main/java

  2. 编译输出目录 target/classes

  3. 打包方式 jar

  4. 包输出目录 target

  5. 在项目的根目录放置pom.xml

Maven中,约定的项是能够通过配置项修改的,约定的项也是配置在超级POM中,可以在当前的POM文件,通过修改对应配置进行覆盖。

1.4 Archetype生成项目骨架

基于约定大于配置的思想,Maven可以使用Archetype快速的生成项目骨架,在Maven 3 中,简单运行:mvn archetype:generate

Archetype可以简单理解成项目模块。Archetype不是Maven的核心特性,主要是通过maven-archetype-plugin插件来实现的。

常用的Archetype有:

maven-archetype-quickstart

maven-archetype-webapp

1.5 最佳实践

groupId定义项目的组,一般为公司的反向域名+项目的名称,如:com.xxx.myApp

artifactId定义了当前项目在组中的唯一id,一般以项目名称为前缀,如:myApp-base

一个公司会有很多项目,一个项目会有很多模块,所以groupId定义到到项目层次,artifactId定义到模块层次,当只有一个模块时,artifactId可以是项目名称。

1.6 Maven安装最佳实践

  1. 设置MAVEN_OPTS环境变量

mvn命令实际是执行了Java命令,因此Java命令可用的参数在运行mvn时也可用。Java默认的最大可用内存往往不能够满足Maven运行的需求,一般将MAVEN_OPTS的值设置为-Xms128m –Xmx512m,并且设置到环境变量,而不建议修改mvn.batmvn,升级的时候会被覆盖,需要重新配置,麻烦并且容易忘记。

  1. 配置用户范围的settings.xml

Maven有两个配置文件${m2_HOME}/conf/settings.xml${user}/.m2/settings.xml前者是全局范围的,整台机器上所有用户都会受该配置影响,而后者是用户范围的,只会影响当前用户。

推荐配置用户范围的配置,可以避免无意识影响其他用户,也可以避免Maven升级时,配置被覆盖。

  1. 不要使用IDE内嵌的Maven

内嵌的Maven版本通常会比较新,但不一定稳定,而且往往与命令行使用的Maven不是同个版本,因此由于不稳定,可能会出现一些难以理解的问题,其次版本不一致可能导致构建行为不一致。

Maven实战读书笔记(一):Maven概述的更多相关文章

  1. maven实战读书笔记(二)

    一个Spring加载属性的工具类,指定目标位置之后可以用${}的方式加载配置文件 测试maven工程发送email的例子:运行成功的例子—github 常用的命令: mvn clean compile ...

  2. Maven实战读书笔记(七):Maven常用功能

    7.1.资源排除 <resources> <!-- 启动过滤,包含的文件会被过滤掉 --> <resource> <directory>src/main ...

  3. Maven实战读书笔记(二):Maven坐标与仓库

    2.1 Maven坐标 Maven坐标是Maven用来表示一个组件依赖的标示. Maven通过下面几个元素定义坐标:groupId.artifactId.version.packaging.class ...

  4. Maven实战读书笔记(四):Maven生命周期与插件

    Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成 ...

  5. maven实战读书笔记(三)

    maven将一系列的步骤都封装为一系列的插件,运行命令后一系列的插件运行

  6. maven实战读书笔记(一)

    环境变量设置 MAVEN_HOME:G:\maven-3.2\apache-maven-3.2.5 Path: G:\maven-3.2\apache-maven-3.2.5\bin 其实正确的设置应 ...

  7. Maven实战读书笔记(五):聚合与继承

    Maven的聚合特性能够把项目的各个模块聚合在一起构建,而继承特性则能够帮助抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 5.1 聚合 Maven聚合也称多模块 ...

  8. Maven实战读书笔记(六):Maven灵活构建

    Maven为了支持构建的灵活性,内置了3大特性,即:属性.Profile和资源过滤. 6.1 Maven属性 Maven的属性与Java代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管 ...

  9. Maven实战读书笔记(三):Maven依赖

    3.1 依赖的配置 一个依赖声明可以包含下面元素: <dependencies> <dependency> <groupId></groupId> &l ...

随机推荐

  1. bash 脚本编程七 将命令输出保存到变量中(转载)

    转自:http://blog.csdn.net/csfreebird/article/details/7978699 `符号包含的命令执行完后,可以讲其输出结果保存到变量中 #!/bin/bash v ...

  2. 51nod 1095【映射】

    思路: 利用一个map记录初始的,利用一个map记录排序后的. #include <bits/stdc++.h> using namespace std; map<string,in ...

  3. win32 指令大全

    指令类型 助记符 (带*为特权指令) 对标志寄存器的影响 备注 说明 举例 ZF CF PF SF OF AF DF IF TF 数据传送类 数据传送 MOV 不影响标志位 Move MOV r/m3 ...

  4. selenium中Xpath和CSS Selector的使用方法

    一.selenium中Xpath的使用方法 1. 什么是xpath? Xpath是XML的路径语言,通俗一点讲就是通过元素的路径来查找这个标签元素 2. 练习Xpath的工具 火狐浏览器,下载插件Fi ...

  5. python之迷宫BFS

    # @File: maze_queue_bfs from collections import deque maze = [ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 0 ...

  6. 求n的因子个数与其因子数之和

    方法一:朴素算法:O(n). #include<bits/stdc++.h> using namespace std; int get_num(int n){ ; ;i<=n;++i ...

  7. 125 Valid Palindrome 验证回文字符串

    给定一个字符串,确定它是否是回文,只考虑字母数字字符和忽略大小写.例如:"A man, a plan, a canal: Panama" 是回文字符串."race a c ...

  8. 动手实现 Redux(六):Redux 总结

    不知不觉地,到这里大家不仅仅已经掌握了 Redux,而且还自己动手写了一个 Redux.我们从一个非常原始的代码开始,不停地在发现问题.解决问题.优化代码的过程中进行推演,最后把 Redux 模式自己 ...

  9. Elasticsearch (1) - 索引库 文档 分词

    创建索引库 ES的索引库是一个逻辑概念,它包括了分词列表及文档列表,同一个索引库中存储了相同类型的文档.它就相当于MySQL中的表,或相当于Mongodb中的集合. 关于索引这个语: 索引(名词):E ...

  10. 【转】Android进程机制

    以下资料摘录整理自老罗的Android之旅博客,是对老罗的博客关于Android底层原理的一个抽象的知识概括总结(如有错误欢迎指出)(侵删):http://blog.csdn.net/luosheng ...