maven 介绍(一)
本文内容主要摘自:http://www.konghao.org/index 内部视频
http://www.ibm.com/developerworks/cn/java/j-lo-maven/
一、 简介:
1. 下载maven,配置path
2. 修改本地仓库位置,修改maven目录下的conf中的setting.xml,增加如下内容localRepository配置,例如:<localRepository>D:\maven\Repository</localRepository>
3. maven 配置说明:
groupId: 当前Maven项目隶属的实际项目,可以是域名反向,一般用项目名称来表示
artifacId: 该元素定义实际项目中的一个Maven项目(模块),推荐的做法是使用实际项目名-模块名称来表示
version: 当前版本
packaging:定义Maven项目的打包方式。首先,打包方式通常与所生成构件的文件扩展名对应。jar包和war包会使用不同的命令,当不定义packaging的时候,默认使用jar
4. 代码和资源存放位置:
源代码应该放置到src/main/java中
源代码的资源文件应该放置在src/main/resources文件夹中
测试代码应该放置到src/test/java中
测试代码的资源文件应该放置在src/test/resources文件夹中
5. mvn 常用命令:
mvn clean -->表示运行清理操作(会默认把target文件夹中的数据清理)
mvn clean compile-->表示先运行清理之后运行编译,会见代码编译到target文件夹中
mvn clean test-->运行清理和测试
mvn clean package-->运行清理和打包
mvn clean install-->运行清理和安装,会将打好的包安装到本地仓库中,以便其他的项目可以调用
mvn clean deploy-->运行清理和发布(发布到私服上面)
6. maven 项目生成方式:
1). mvn archetype generate可以自动完成这个骨架的建立
2). 使用eclipse开发maven项目
a). 配置本地自定义maven路径:
b). 右键 -- > new -- > maven project ,然后可以根据需求创建需要的maven项目
aa). 在New Maven Project 对话框中选择:create a simple project ,创建一个简单的项目,不包括项目目录。
bb). 下一步,catalog选择Internal 。Artifact Id 选择maven-archetype-quickstart创建一个简单的java项目,
选择maven-archetype-webapp创建一个简单的web项目。
The folder is already a source folder处理方式:右键build path -> configure build path -> source ,选择 src/main/java、src/test/java删除,然后再新建。
二、依赖
我们项目中依赖的 Jar 包可以通过依赖的方式引入,通过在 dependencies 元素下添加 dependency 子元素,可以声明一个或多个依赖。通过控制依赖的范围,
可以指定该依赖在什么阶段有效。
1. 依赖包的查询:
1). 所有的依赖都是通过坐标来进行存储的(GAV : groupId , artifactId , version )
2). 有一些网上的仓库提供了坐标的查询(http://mvnrepository.com/)
3). 通过<dependencies>设置依赖:
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询
2. 依赖会被传递:
A-->C B-->A ==> B-->C(这种依赖是基于compile这个范围进行传递)
对于依赖的传递而言,主要是针对compile作用域传递
3. 依赖传递的冲突问题:
1). a-->b1.0 c-->b1.1 d-->a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本,如果d--><d>a</d><d>c</d>-->依赖版本是b1.0
2). a-->b1.0 c-->b1.1 d-->a和c-->b1.0 f-->d,c,如果路径的长短不一致就选择最小路径 , f-->b1.1
3). 如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
4. 依赖的范围(scope声明):
1). test范围指的是测试范围内有效,在编译和打包的时候都不会使用这个依赖
2). compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
3). provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突
4). runtime在运行的时候依赖,在编译的时候不依赖
默认的依赖范围是compile
5. 聚合和继承:
1). 聚合:现实中一个项目往往是由多个 project 构成的,在进行构建时,我们当然不想针对多个 project 分别执行多次构建命令,这样极容易产生遗漏也会大大
降低效率。Maven 的聚合功能可以通过一个父模块将所有的要构建模块整合起来,将父模块的打包类型声明为 POM,通过 <modules> 将各模块集中到父
POM 中。其中 <module></module> 中间的内容为子模块工程名的相对路径。例如:
2). 继承:在面向对象的编程中我们学会了继承的概念,继承是可重用行即消除重复编码的行为。Maven 中继承的用意和面向对象编程中是一致的。
与聚合的实现类似,我们通过构建父模块将子模块共用的依赖,插件等进行统一声明,在聚合和继承同时使用时,我们可以用同一个父模块来完成这两个功能。
父文件:
子文件:
由于父模块只是用来声明一些可共用的配置和插件信息,所以它也像聚合模块一样只需要包括一个 POM 文件,其它的项目文件如 src/main/java 是不需要的。
聚合和继承存在一些共性和潜在的联系,在实际的应用中,经常将聚合模块的父模块和继承的父模块定义为同一个。并不是所有的 POM 元素都可以被继承,下图
是一个可继承的元素列表。
名称 | 描述 |
---|---|
groupId | 项目组 ID |
version | 项目版本 |
description | 描述信息 |
organization | 组织信息 |
inceptionYear | 创始年份 |
url | 项目的 url 地址 |
developers | 开发者 |
contributors | 贡献者信息 |
distributionManagerment | 部署信息 |
issueManagement | 缺陷跟踪系统 |
ciManagement | 持续继承信息 |
scm | 版本控制信息 |
mailingList | 邮件列表信息 |
properties | 自定义的属性 |
dependencies | 依赖配置 |
dependencyManagement | 依赖管理配置 |
repositories | 仓库配置 |
build | 源码目录,插件管理等配置 |
reporting | 报告配置 |
6. 版本管理:
总版本号.分支版本号.小版本号-里程碑版本
总版本号的变动一般表示框架的变动
分支版本号:一般表示增加了一些功能
小版本号:在分支版本上面进行bug的修复
里程碑:SNAPSHOT-->alpha-->beta-->release-->GA
user0.0.1-SNAPSHOT-->user0.0.1-Release--->user1.0.0SHAPSHOT -->user1.0.0-Rlease
-->user0.1.0-SNAPSHOT-->user0.1.0-Rlease
7. 去除依赖:
依赖是具有传递性的,例如 Project A 依赖于 Project B,B 依赖于 C,那么 B 对 C 的依赖关系也会传递给 A,如果我们不需要这种传递性依赖,也可以用 <optional>
去除这种依赖的传递
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
<optional>true<optional>
</dependency>
假设第三方的 jar 包中没有使用 <optional> 来去除某些依赖的传递性,那么可以在当前的 POM 文件中使用 <exclusions> 元素声明排除依赖,exclusions 可以包含一个或者
多个 exclusion 子元素,因此可以排除一个或者多个传递性依赖。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
maven 介绍(一)的更多相关文章
- 项目管理利器maven学习笔记(一):maven介绍及环境搭建
maven介绍 maven下载与环境搭建 http://maven.apache.org/download.cgi# 解压到指定位置,比如我解压到D盘 设置maven环境变量 添加一个变量名,变量值为 ...
- maven 介绍(zz )
Maven 编辑 目录 1简介 2特点 3常用命令 4推荐书籍 5Win7配置 6生命周期 1 1简介 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构 ...
- Mave实战(1)——Maven介绍
目录 1. Maven介绍 1.1. 何为Maven 1.1.1. Maven是优秀的构建工具 1.1.2. Maven不仅仅是构建工具 1. Maven介绍 1.1. 何为Maven Maven是一 ...
- Maven介绍及环境搭建
Maven介绍及环境搭建 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. 下载Maven boot:类加载器框架,Maven使用它加在自 ...
- Maven介绍及安装
1.maven是一个管理第三方库的jar package 2.从该页面下载相应的Maven jar包(http://maven.apache.org/download.cgi),linux OS下 ...
- jenkins及Maven介绍
一.环境介绍 随着软件开发需求及复杂度的不断提高,团队开发成员之间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.Jenkins自动化部署可以解决集成.测试.部署等重复性的 ...
- Maven快速入门(一)Maven介绍及环境搭建
做开发的程序员都知道,在系统开发需要各自各样的框架.工具.其中有一种工具不管你是初级程序员还是高级程序员都必须熟练掌握的,那就是项目管理工具(maven.ant.gradle).接下来就总结Maven ...
- Maven 介绍
1.maven的用途maven是一个项目构建和管理的工具,提供了帮助管理 构建.文档.报告.依赖.scms.发布.分发的方法.可以方便的编译代码.进行依赖管理.管理二进制库等等.maven的好处在于可 ...
- Maven介绍,包括作用、核心概念、用法、常用命令、扩展及配置
由浅入深,主要介绍maven的用途.核心概念(Pom.Repositories.Artifact.Build Lifecycle.Goal).用法(Archetype意义及创建各种项目).maven常 ...
- maven介绍
Maven Maven的概念: Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件. Maven的作用: Maven可以帮助我们一键管理项目 1.管 ...
随机推荐
- iOS开发之--使用storyboard进行跳转
iOS开发中使用故事板进行开发是非常高效的一种方式,虽然有这样那样的问题,但是不得不承认,使用sb可以在最短的时间内完成整个项目的布局,节约开发者大量的时间,而且便于修改,非常直观,虽然可能不太灵活, ...
- Oracle sqlldr命令
今天别人的入库代码,看的真有点晕,最后看完才知道是用了sqlldr命令.哎...还是学艺不精啊,今后还是要多努力. 总结哈sqlldr命令:虽然大多是网上来的,自己要有体会嘛 !开源就是好啊. sql ...
- 开发VS2008 AddIn 入门Sample
本文主要介绍的是VS2008插件开发 环境要求:VS2008:.Net3.5 目标:开发插件功能为“在VS中创建文本文档,并在文本开头输入//This code was created For Tes ...
- java解析xml字符串(用dom4j)
package com.smsServer.Dhst; import java.util.HashMap; import java.util.Iterator; import java.util.Ma ...
- poj_2559 单调栈
题目大意 给出一个柱形图中柱子的高度,每个柱子的宽度为1,柱子相邻.求出柱形图中可能形成的矩形的最大面积. 题目分析 以每个柱子(高度为h[i])为中心,向两边延展求出以该h[i]为高度的矩形的最大宽 ...
- centos7上开启路由转发
CentOS7 开启路由转发 2018-03-27 09:18:14 1.临时开启,(写入内存,在内存中开启) echo "1" > /proc/sys/net/ipv4 ...
- MapRecude
任务:分析通话记录,查处每个手机号码有哪些打过来的号码 13510921776 10086 13710148751 10086 13914248991 10086 13510921776 137101 ...
- Poloniex API 文档
Examples PHP wrapper by compcentral: http://pastebin.com/iuezwGRZ Python wrapper by oipminer: http:/ ...
- d3.js:数据可视化利器之 selection:选择集
选择集/selection 选择集/selection是d3中的核心对象,用来封装一组从当前HTML文档中选中的元素: d3提供了两个方法用来创建selection对象: select(selecto ...
- 漫谈JS 的继承方式
一.原型链原型链的基本思想是利用原型让一个引用类型继承另一个引用类型的属性和方法.每一个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,而实例都包含一个指向原型对象的指针.如果:我们让 ...