Maven实战读书笔记(一):Maven概述
1.1 Maven是什么,能做什么
Maven是一个跨平台的项目管理工具,主要服务于Java平台的项目构建、依赖管理和项目信息管理。
Maven的用途之一是项目构建,能够自动化构建过程,从清理、编译、测试到生成报告,再到打包和部署,只需要输入简单命令即可(如mvn clean install)。
Maven不仅是构建工具,还是依赖管理工具和项目信息管理工具,通过提供中央仓库,自动帮我们下载构件(artifact)。
Remark:
Maven依赖于JDK,安装Maven之前需要先安装JDK。Maven可以运行在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 2及Maven 3而言,该值只能是4.0.0。
groupId、artifactId、version定义了一个项目的基本坐标。
packaging可以为jar(默认)、pom、war,是基于基本坐标进行区分的。
1.3 约定大于配置
在Maven中,使用了约定大于配置的原则,可以大量减少配置。默认的约定有:
源码路径
src/main/java编译输出目录
target/classes打包方式
jar包输出目录
target在项目的根目录放置
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安装最佳实践
- 设置
MAVEN_OPTS环境变量
mvn命令实际是执行了Java命令,因此Java命令可用的参数在运行mvn时也可用。Java默认的最大可用内存往往不能够满足Maven运行的需求,一般将MAVEN_OPTS的值设置为-Xms128m –Xmx512m,并且设置到环境变量,而不建议修改mvn.bat或mvn,升级的时候会被覆盖,需要重新配置,麻烦并且容易忘记。
- 配置用户范围的
settings.xml
Maven有两个配置文件${m2_HOME}/conf/settings.xml和${user}/.m2/settings.xml前者是全局范围的,整台机器上所有用户都会受该配置影响,而后者是用户范围的,只会影响当前用户。
推荐配置用户范围的配置,可以避免无意识影响其他用户,也可以避免Maven升级时,配置被覆盖。
- 不要使用
IDE内嵌的Maven
内嵌的Maven版本通常会比较新,但不一定稳定,而且往往与命令行使用的Maven不是同个版本,因此由于不稳定,可能会出现一些难以理解的问题,其次版本不一致可能导致构建行为不一致。
Maven实战读书笔记(一):Maven概述的更多相关文章
- maven实战读书笔记(二)
一个Spring加载属性的工具类,指定目标位置之后可以用${}的方式加载配置文件 测试maven工程发送email的例子:运行成功的例子—github 常用的命令: mvn clean compile ...
- Maven实战读书笔记(七):Maven常用功能
7.1.资源排除 <resources> <!-- 启动过滤,包含的文件会被过滤掉 --> <resource> <directory>src/main ...
- Maven实战读书笔记(二):Maven坐标与仓库
2.1 Maven坐标 Maven坐标是Maven用来表示一个组件依赖的标示. Maven通过下面几个元素定义坐标:groupId.artifactId.version.packaging.class ...
- Maven实战读书笔记(四):Maven生命周期与插件
Maven的生命周期是对所有构建过程的抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有构建步骤. Maven的生命周期是抽象的,其实际行为是由插件来完成 ...
- maven实战读书笔记(三)
maven将一系列的步骤都封装为一系列的插件,运行命令后一系列的插件运行
- maven实战读书笔记(一)
环境变量设置 MAVEN_HOME:G:\maven-3.2\apache-maven-3.2.5 Path: G:\maven-3.2\apache-maven-3.2.5\bin 其实正确的设置应 ...
- Maven实战读书笔记(五):聚合与继承
Maven的聚合特性能够把项目的各个模块聚合在一起构建,而继承特性则能够帮助抽取各模块相同的依赖和插件等配置,在简化POM的同时,还能促进各个模块配置的一致性. 5.1 聚合 Maven聚合也称多模块 ...
- Maven实战读书笔记(六):Maven灵活构建
Maven为了支持构建的灵活性,内置了3大特性,即:属性.Profile和资源过滤. 6.1 Maven属性 Maven的属性与Java代码的常量有异曲同工之妙,都是为了消除重复,对相关内容进行统一管 ...
- Maven实战读书笔记(三):Maven依赖
3.1 依赖的配置 一个依赖声明可以包含下面元素: <dependencies> <dependency> <groupId></groupId> &l ...
随机推荐
- sql server2008配置管理工具服务显示远程过程调用失败
SQL SERVER2008配置管理工具服务显示远程过程调用失败 前两天,装了VS2012后,打开SQL2008配置管理工具,发现SQL服务名称里什么也没有,只有一个提示:(如图) 上网搜了,试了 ...
- 如何开始学习Go语言
除了Java.Python和JavaScript之外,如果要开始学习一门新语言的话,我想应该是Go! Go语言正在被越来越多的公司使用.我们公司的后端服务已经全面采用Go语言实现了. 最开始接触Go语 ...
- POJ1700 【经典过河问题,贪心】
题意: n个人过河, 船每次只能坐两个人, 然后船载每个人过河的所需时间不同, 问最快的过河时间. 思路: 仅仅启发一下思维: 我相信很多人一下子的想法就会有,每次最快和那些慢的过去,然后让最快一直来 ...
- useradd user 错误解决
今天给安装Sequoiadb 软体时,出现添加用户和组失败,显示错误: cannot lock /et/passwd; try again later. 在网上查了一下,说是/etc/passwd 文 ...
- USACO Training3.2 01串 By cellur925
题目传送门 一句话题意:求长度为n的有m个1的大小为第k个的01串. 暑假我做的时候是真·大暴力,用二进制枚举,55分,成功T掉无数点. 正解:开始可以用计数类dp来“预处理”,状态和转移都比较好想. ...
- 关于使用IQKeyBoardManager键盘还是被遮挡的问题解决方案
今天在做一个登录界面的时候发现使用了IQKeyBoardManager键盘还是被遮挡,解决方案如下 解决方案一:在所有视图的最外层添加一个UIView作为容器即可,但在有导航栏的情况下导航栏会跟着向上 ...
- HDU 6183 Color it(动态开点线段树)
题目原网址:http://acm.hdu.edu.cn/showproblem.php?pid=6183 题目中文翻译: Time Limit: 20000/10000 MS (Java/Others ...
- Hexo瞎折腾系列(5) - 使用hexo-neat插件压缩页面静态资源
为什么要压缩页面静态资源 对于个人博客来说,优化页面的访问速度是很有必要的,如果打开你的个人站点,加载个首页就要十几秒,页面长时间处于空白状态,想必没什么人能够忍受得了吧.我个人觉得,如果能把页面的加 ...
- python_9(模块补充)
第1章 re模块补充 1.1 贪婪匹配:回溯算法 1.2 .*?的用法 1.3 例:分组<name>取值 1.4 匹配整数删除小数 1.5 正则测试地址 第2章 重点模块 2.1 hash ...
- linux/centos系统如何使用yum安装vi/vim?
yum安装vim最简单的命令, yum -y install vim* 然后就可以使用vi命令了. 网上的文章: 要使用vim, 使用yum看了一下,发现有4个 vim-common.i386 ...